diff --git a/CMakeLists.txt b/CMakeLists.txt index 046aa859eea..2357756b477 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -184,7 +184,14 @@ execute_process( ERROR_QUIET ) if(NOT CODEGEN_DEPS_EXIT_CODE EQUAL 0) - message(FATAL_ERROR "Run: ${Python_EXECUTABLE} -m pip install -r tools/requirements.txt") + message(FATAL_ERROR + "Codegen requires the Python packages jinja2, jsonschema, and pyyaml, " + "but they are not installed for the interpreter CMake selected:\n" + " ${Python_EXECUTABLE}\n" + "Install them by running this command exactly as shown (the interpreter path " + "matters, so the packages land in the environment this build uses):\n" + " ${Python_EXECUTABLE} -m pip install -r ${CMAKE_SOURCE_DIR}/tools/requirements.txt" + ) endif() add_custom_target(data_codegen diff --git a/data/enums/effect_overwrite.yaml b/data/enums/effect_overwrite.yaml index 1bcbfb56847..db98c5844b3 100644 --- a/data/enums/effect_overwrite.yaml +++ b/data/enums/effect_overwrite.yaml @@ -8,8 +8,8 @@ meta: values: equal_higher: 0 # only overwrite if equal or higher (tier, power) - higher: 1 # only overwrite if strictly higher - never: 2 - always: 3 - ignore_duplicate: 4 + higher: 1 # only overwrite if higher (tier, power) + never: 2 # never overwrite + always: 3 # always overwrite no matter + ignore_duplicate: 4 # ignore dupes tier_higher: 5 # only overwrite if tier is higher (regardless of power) diff --git a/src/map/ability.cpp b/src/map/ability.cpp index c79f603c0ca..b5f8e96e391 100644 --- a/src/map/ability.cpp +++ b/src/map/ability.cpp @@ -87,7 +87,7 @@ void CAbility::setActionType(const ActionCategory type) m_actionType = type; } -void CAbility::setPostActionEffectCleanup(EFFECT effectToCleanup) +void CAbility::setPostActionEffectCleanup(xi::StatusEffect effectToCleanup) { m_cleanupEffect = effectToCleanup; } @@ -187,7 +187,7 @@ auto CAbility::getActionType() const -> ActionCategory return m_actionType; } -EFFECT CAbility::getPostActionEffectCleanup() +auto CAbility::getPostActionEffectCleanup() -> xi::StatusEffect { return m_cleanupEffect; } diff --git a/src/map/ability.h b/src/map/ability.h index 5875bbc1a5c..5f41fc74f5f 100644 --- a/src/map/ability.h +++ b/src/map/ability.h @@ -720,7 +720,7 @@ class CAbility int32 getVE() const; uint16 getMeritModID() const; auto getActionType() const -> ActionCategory; - EFFECT getPostActionEffectCleanup(); + auto getPostActionEffectCleanup() -> xi::StatusEffect; void setID(uint16 id); void setJob(JOBTYPE Job); @@ -740,32 +740,32 @@ class CAbility void setVE(int32 VE); void setMeritModID(uint16 value); void setActionType(ActionCategory type); - void setPostActionEffectCleanup(EFFECT effectToCleanup); + void setPostActionEffectCleanup(xi::StatusEffect effectToCleanup); const std::string& getName(); void setName(const std::string& name); private: - uint16 m_ID; - JOBTYPE m_Job; - uint8 m_level; - uint16 m_animationID; - timer::duration m_animationTime{}; - timer::duration m_castTime{}; - float m_range; - uint8 m_aoe; - uint8 m_radius{ 0 }; - uint16 m_validTarget; - uint16 m_addType; - MsgBasic m_message; - timer::duration m_recastTime{}; - Recast m_recastId; - int32 m_CE; - int32 m_VE; - uint16 m_meritModID; - std::string m_name; - ActionCategory m_actionType{}; - EFFECT m_cleanupEffect{}; + uint16 m_ID; + JOBTYPE m_Job; + uint8 m_level; + uint16 m_animationID; + timer::duration m_animationTime{}; + timer::duration m_castTime{}; + float m_range; + uint8 m_aoe; + uint8 m_radius{ 0 }; + uint16 m_validTarget; + uint16 m_addType; + MsgBasic m_message; + timer::duration m_recastTime{}; + Recast m_recastId; + int32 m_CE; + int32 m_VE; + uint16 m_meritModID; + std::string m_name; + ActionCategory m_actionType{}; + xi::StatusEffect m_cleanupEffect{}; }; /************************************************************************ diff --git a/src/map/ai/controllers/automaton_controller.cpp b/src/map/ai/controllers/automaton_controller.cpp index 1ba6191369a..2e786696a50 100644 --- a/src/map/ai/controllers/automaton_controller.cpp +++ b/src/map/ai/controllers/automaton_controller.cpp @@ -172,14 +172,14 @@ auto CAutomatonController::GetCurrentManeuvers() const -> CurrentManeuvers { const auto& statuses = PAutomaton->PMaster->StatusEffectContainer; return { - statuses->GetEffectsCount(EFFECT_FIRE_MANEUVER), - statuses->GetEffectsCount(EFFECT_ICE_MANEUVER), - statuses->GetEffectsCount(EFFECT_WIND_MANEUVER), - statuses->GetEffectsCount(EFFECT_EARTH_MANEUVER), - statuses->GetEffectsCount(EFFECT_THUNDER_MANEUVER), - statuses->GetEffectsCount(EFFECT_WATER_MANEUVER), - statuses->GetEffectsCount(EFFECT_LIGHT_MANEUVER), - statuses->GetEffectsCount(EFFECT_DARK_MANEUVER), + statuses->GetEffectsCount(xi::StatusEffect::FireManeuver), + statuses->GetEffectsCount(xi::StatusEffect::IceManeuver), + statuses->GetEffectsCount(xi::StatusEffect::WindManeuver), + statuses->GetEffectsCount(xi::StatusEffect::EarthManeuver), + statuses->GetEffectsCount(xi::StatusEffect::ThunderManeuver), + statuses->GetEffectsCount(xi::StatusEffect::WaterManeuver), + statuses->GetEffectsCount(xi::StatusEffect::LightManeuver), + statuses->GetEffectsCount(xi::StatusEffect::DarkManeuver), }; } @@ -735,7 +735,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo { if (!dispel && PStatus->GetDuration() > 0s) { - if (PStatus->HasEffectFlag(EFFECTFLAG_DISPELABLE)) + if (PStatus->HasEffectFlag(xi::StatusEffectFlag::Dispelable)) { dispel = true; return; @@ -751,7 +751,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo } default: { - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DIA)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Dia)) { if (maneuvers.dark) // Dark -> Bio { @@ -763,7 +763,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo } } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_BIO)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bio)) { if (maneuvers.light) { @@ -775,7 +775,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo } } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DIA)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Dia)) { if (maneuvers.dark) // Dark -> Bio { @@ -787,7 +787,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo } } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_BIO)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bio)) { if (maneuvers.light) { @@ -871,19 +871,19 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo if (maneuvers.dark) // Dark -> Access to Enfeebles { - if (!PAutomaton->StatusEffectContainer->HasStatusEffect(EFFECT_INT_BOOST)) + if (!PAutomaton->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::IntBoost)) { // Use it ASAP defaultPriority.emplace_back(SpellID::Absorb_INT); } // Not prioritizable since it requires 1 Dark to access Enfeebles and requires 2 of another element to prioritize another defaultPriority.emplace_back(SpellID::Blind); - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DIA)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Dia)) { defaultPriority.emplace_back(SpellID::Bio_II); } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_BIO)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bio)) { if (maneuvers.light >= 2) // 2 Light -> Dia { @@ -894,12 +894,12 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo defaultPriority.emplace_back(SpellID::Dia_II); } } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DIA)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Dia)) { defaultPriority.emplace_back(SpellID::Bio); } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_BIO)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bio)) { if (maneuvers.light >= 2) // 2 Light -> Dia { @@ -985,7 +985,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo if (maneuvers.dark) // Dark -> Blind > Bio { castPriority.emplace_back(SpellID::Blind); - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DIA)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Dia)) { castPriority.emplace_back(SpellID::Bio_II); } @@ -993,13 +993,13 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo else { defaultPriority.emplace_back(SpellID::Blind); - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DIA)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Dia)) { defaultPriority.emplace_back(SpellID::Bio_II); } } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_BIO)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bio)) { if (maneuvers.light) // Light -> Dia { @@ -1011,7 +1011,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo } } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DIA)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Dia)) { if (maneuvers.dark) // Dark -> Blind > Bio { @@ -1023,7 +1023,7 @@ auto CAutomatonController::TryEnfeeble(const CurrentManeuvers& maneuvers) -> boo } } - if (!PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_BIO)) + if (!PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bio)) { if (maneuvers.light) // Light -> Dia { @@ -1229,29 +1229,29 @@ auto CAutomatonController::TryEnhance() -> bool { if (PStatus->GetDuration() > 0s) { - if (PStatus->GetStatusID() == EFFECT_PROTECT) + if (PStatus->GetStatusID() == xi::StatusEffect::Protect) { protect = true; ++protectcount; } - if (PStatus->GetStatusID() == EFFECT_SHELL) + if (PStatus->GetStatusID() == xi::StatusEffect::Shell) { shell = true; ++shellcount; } - if (PStatus->GetStatusID() == EFFECT_HASTE || PStatus->GetStatusID() == EFFECT_GEO_HASTE) + if (PStatus->GetStatusID() == xi::StatusEffect::Haste || PStatus->GetStatusID() == xi::StatusEffect::GeoHaste) { haste = true; } - if (PStatus->GetStatusID() == EFFECT_STONESKIN) + if (PStatus->GetStatusID() == xi::StatusEffect::Stoneskin) { stoneskin = true; } - if (PStatus->GetStatusID() == EFFECT_PHALANX) + if (PStatus->GetStatusID() == xi::StatusEffect::Phalanx) { phalanx = true; } @@ -1309,17 +1309,17 @@ auto CAutomatonController::TryEnhance() -> bool { if (PStatus->GetDuration() > 0s) { - if (PStatus->GetStatusID() == EFFECT_PROTECT) + if (PStatus->GetStatusID() == xi::StatusEffect::Protect) { protect = true; } - if (PStatus->GetStatusID() == EFFECT_SHELL) + if (PStatus->GetStatusID() == xi::StatusEffect::Shell) { shell = true; } - if (PStatus->GetStatusID() == EFFECT_HASTE || PStatus->GetStatusID() == EFFECT_GEO_HASTE) + if (PStatus->GetStatusID() == xi::StatusEffect::Haste || PStatus->GetStatusID() == xi::StatusEffect::GeoHaste) { haste = true; } @@ -1381,19 +1381,19 @@ auto CAutomatonController::TryEnhance() -> bool { if (PStatus->GetDuration() > 0s) { - if (PStatus->GetStatusID() == EFFECT_PROTECT) + if (PStatus->GetStatusID() == xi::StatusEffect::Protect) { protect = true; ++protectcount; } - if (PStatus->GetStatusID() == EFFECT_SHELL) + if (PStatus->GetStatusID() == xi::StatusEffect::Shell) { shell = true; ++shellcount; } - if (PStatus->GetStatusID() == EFFECT_HASTE || PStatus->GetStatusID() == EFFECT_GEO_HASTE) + if (PStatus->GetStatusID() == xi::StatusEffect::Haste || PStatus->GetStatusID() == xi::StatusEffect::GeoHaste) { haste = true; } @@ -1435,7 +1435,7 @@ auto CAutomatonController::TryEnhance() -> bool } if (PRegenTarget && - !(PRegenTarget->StatusEffectContainer->HasStatusEffect(EFFECT_REGEN) || PRegenTarget->StatusEffectContainer->HasStatusEffect(EFFECT_GEO_REGEN))) + !(PRegenTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Regen) || PRegenTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::GeoRegen))) { if (Cast(PRegenTarget->targid, SpellID::Regen_III) || Cast(PRegenTarget->targid, SpellID::Regen_II) || Cast(PRegenTarget->targid, SpellID::Regen)) { @@ -1523,7 +1523,7 @@ auto CAutomatonController::TryTPMove() -> bool if (attemptChain) { - CStatusEffect* PSCEffect = PTarget->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0); + CStatusEffect* PSCEffect = PTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0); if (PSCEffect && PSCEffect->GetStartTime() + 3s < timer::now()) { std::list resonanceProperties; @@ -1613,7 +1613,7 @@ auto CAutomatonController::TryAttachment() -> bool auto CAutomatonController::CanCastSpells(IgnoreRecastsAndCosts ignoreRecastsAndCosts) -> bool { // Check for spell blockers e.g. silence - if (PAutomaton->StatusEffectContainer->HasStatusEffect({ EFFECT_SILENCE, EFFECT_MUTE })) + if (PAutomaton->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Silence, xi::StatusEffect::Mute })) { return false; } @@ -1675,7 +1675,7 @@ void LoadAutomatonSpellList() AutomatonSpell PSpell{ .skilllevel = rset->get("skilllevel"), .heads = rset->get("heads"), - .enfeeble = rset->get("enfeeble"), + .enfeeble = rset->get("enfeeble"), .immunity = rset->get("immunity"), .removes = {}, // Will handle in a moment }; @@ -1683,7 +1683,7 @@ void LoadAutomatonSpellList() uint32 removes = rset->get("removes"); while (removes > 0) { - PSpell.removes.emplace_back(static_cast(removes & 0xFF)); + PSpell.removes.emplace_back(static_cast(removes & 0xFF)); removes = removes >> 8; } @@ -1721,7 +1721,7 @@ Maybe FindNaSpell(CStatusEffect* PStatus) } } - if (PStatus->HasEffectFlag(EFFECTFLAG_ERASABLE)) + if (PStatus->HasEffectFlag(xi::StatusEffectFlag::Erasable)) { return SpellID::Erase; } diff --git a/src/map/ai/controllers/automaton_controller.h b/src/map/ai/controllers/automaton_controller.h index d51cf7f3946..4972382133b 100644 --- a/src/map/ai/controllers/automaton_controller.h +++ b/src/map/ai/controllers/automaton_controller.h @@ -49,11 +49,11 @@ struct AutomatonAbility struct AutomatonSpell { - uint16 skilllevel{ 0 }; - uint8 heads{ 0 }; - EFFECT enfeeble{ EFFECT_KO }; - IMMUNITY immunity{ IMMUNITY_NONE }; - std::vector removes; + uint16 skilllevel{ 0 }; + uint8 heads{ 0 }; + xi::StatusEffect enfeeble{ xi::StatusEffect::Ko }; + IMMUNITY immunity{ IMMUNITY_NONE }; + std::vector removes; }; class CAutomatonEntity; diff --git a/src/map/ai/controllers/mob_controller.cpp b/src/map/ai/controllers/mob_controller.cpp index f5f64c0dd38..ebf0419b3ef 100644 --- a/src/map/ai/controllers/mob_controller.cpp +++ b/src/map/ai/controllers/mob_controller.cpp @@ -130,7 +130,7 @@ auto CMobController::CanPursueTarget(const CBattleEntity* PTarget) const -> bool if (PMob->getMobMod(MOBMOD_DETECTION) & DETECT_SCENT) { // if mob is in water it will instant deaggro if target cannot be detected - if (!PMob->PAI->PathFind->InWater() && PTarget && !PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DEODORIZE)) + if (!PMob->PAI->PathFind->InWater() && PTarget && !PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Deodorize)) { // certain weather / deodorize will turn on time deaggro return !PMob->m_disableScent; @@ -143,7 +143,7 @@ auto CMobController::CheckHide(const CBattleEntity* PTarget) const -> bool { TracyZoneScoped; - if (PTarget && PTarget->GetMJob() == JOB_THF && PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_HIDE)) + if (PTarget && PTarget->GetMJob() == JOB_THF && PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hide)) { return !CanPursueTarget(PTarget) && !PMob->m_TrueDetection && !(PMob->getMobMod(MOBMOD_DETECTION) & DETECT_HEARING); } @@ -192,7 +192,7 @@ auto CMobController::CheckDetection(CBattleEntity* PTarget) -> bool TracyZoneScoped; if (CanPursueTarget(PTarget) || CanDetectTarget(PTarget) || - PMob->StatusEffectContainer->HasStatusEffect({ EFFECT_BIND, EFFECT_SLEEP, EFFECT_SLEEP_II, EFFECT_LULLABY, EFFECT_PETRIFICATION })) + PMob->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Bind, xi::StatusEffect::SleepI, xi::StatusEffect::SleepIi, xi::StatusEffect::Lullaby, xi::StatusEffect::Petrification })) { TapDeaggroTime(); } @@ -307,14 +307,14 @@ auto CMobController::CanDetectTarget(CBattleEntity* PTarget, const bool forceSig if (!PMob->m_TrueDetection) { - hasInvisible = PTarget->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_INVISIBLE); - hasSneak = PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK); + hasInvisible = PTarget->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Invisible); + hasSneak = PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sneak); } // Illusion effect seems to ignore true detection (true sound Porrogos don't aggro with Illusion up) // Additionally, mobs that would normally aggro you via sound that also ignore illusion must also ignore you with illusion if you have sneak up, // Fish in Mamook will see you through Illusion but not if you have sneak up - if (PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_ILLUSION)) + if (PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Illusion)) { if (!PMob->getMobMod(MOBMOD_SEES_THROUGH_ILLUSION)) { @@ -608,7 +608,7 @@ auto CMobController::CanCastSpells(IgnoreRecastsAndCosts ignoreRecastsAndCosts) } // check for spell blockers e.g. silence - if (PMob->StatusEffectContainer->HasStatusEffect({ EFFECT_SILENCE, EFFECT_MUTE })) + if (PMob->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Silence, xi::StatusEffect::Mute })) { return false; } @@ -1006,7 +1006,7 @@ void CMobController::HandleEnmity() // TODO: do mobs with bind attack players *without* enmity if they are in the same party? // TODO: do jug pets do this? // TODO: This code is assuming charmed mobs can do this -- they DO keep an enmity table, after all.. - if (PMob->objtype == TYPE_MOB && PMob->StatusEffectContainer && PMob->StatusEffectContainer->HasStatusEffect(EFFECT::EFFECT_BIND) && PMob->PAI->IsCurrentState()) + if (PMob->objtype == TYPE_MOB && PMob->StatusEffectContainer && PMob->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bind) && PMob->PAI->IsCurrentState()) { CBattleEntity* PNewTarget = nullptr; std::unique_ptr m_errorMsg; // Ignored @@ -1636,7 +1636,7 @@ auto CMobController::IsSpecialSkillReady(const float currentDistance) const -> b return false; } - if (PMob->StatusEffectContainer->HasStatusEffect(EFFECT_CHAINSPELL)) + if (PMob->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Chainspell)) { return false; } @@ -1655,7 +1655,7 @@ auto CMobController::IsSpellReady(const float& currentDistance, const float& mel { TracyZoneScoped; - if (PMob->StatusEffectContainer->HasStatusEffect({ EFFECT_CHAINSPELL, EFFECT_MANAFONT })) + if (PMob->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Chainspell, xi::StatusEffect::Manafont })) { return true; } diff --git a/src/map/ai/controllers/pet_controller.cpp b/src/map/ai/controllers/pet_controller.cpp index 121d33834f0..33252e9c288 100644 --- a/src/map/ai/controllers/pet_controller.cpp +++ b/src/map/ai/controllers/pet_controller.cpp @@ -140,7 +140,7 @@ auto CPetController::DoRoamTick(timer::time_point tick) -> Task } } - if (isBstPet && PPet->StatusEffectContainer->GetStatusEffect(EFFECT_HEALING)) + if (isBstPet && PPet->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Healing)) { co_return; } @@ -183,7 +183,7 @@ bool CPetController::PetIsHealing() { // Animation down PPet->animation = ANIMATION_HEALING; - PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_HEALING, 0, 0, std::chrono::seconds(settings::get("map.HEALING_TICK_DELAY")), 0s)); + PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Healing, 0, 0, std::chrono::seconds(settings::get("map.HEALING_TICK_DELAY")), 0s)); PPet->updatemask |= UPDATE_HP; return true; } @@ -191,7 +191,7 @@ bool CPetController::PetIsHealing() { // Animation up PPet->animation = ANIMATION_NONE; - PPet->StatusEffectContainer->DelStatusEffect(EFFECT_HEALING); + PPet->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Healing); PPet->updatemask |= UPDATE_HP; return false; } diff --git a/src/map/ai/controllers/player_charm_controller.cpp b/src/map/ai/controllers/player_charm_controller.cpp index df25508124e..76fab58ad5c 100644 --- a/src/map/ai/controllers/player_charm_controller.cpp +++ b/src/map/ai/controllers/player_charm_controller.cpp @@ -48,7 +48,7 @@ auto CPlayerCharmController::Tick(timer::time_point tick) -> Task if (POwner->PMaster == nullptr || !POwner->PMaster->isAlive()) { - POwner->StatusEffectContainer->DelStatusEffect(EFFECT_CHARM); + POwner->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::CharmI); co_return; } diff --git a/src/map/ai/controllers/player_controller.cpp b/src/map/ai/controllers/player_controller.cpp index 3ddd7b433d2..5915732af0b 100644 --- a/src/map/ai/controllers/player_controller.cpp +++ b/src/map/ai/controllers/player_controller.cpp @@ -205,7 +205,7 @@ bool CPlayerController::WeaponSkill(uint16 targid, uint16 wsid) return false; } - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_AMNESIA) || (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_IMPAIRMENT) && (PChar->StatusEffectContainer->GetStatusEffect(EFFECT_IMPAIRMENT)->GetPower() == 0x02 || PChar->StatusEffectContainer->GetStatusEffect(EFFECT_IMPAIRMENT)->GetPower() == 0x03))) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Amnesia) || (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Impairment) && (PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Impairment)->GetPower() == 0x02 || PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Impairment)->GetPower() == 0x03))) { PChar->pushPacket(PChar, PChar, 0, 0, MsgBasic::CannotUseAnyWeaponskill); return false; diff --git a/src/map/ai/helpers/gambits_container.cpp b/src/map/ai/helpers/gambits_container.cpp index 66c82ea2fdb..185d931b979 100644 --- a/src/map/ai/helpers/gambits_container.cpp +++ b/src/map/ai/helpers/gambits_container.cpp @@ -431,7 +431,7 @@ auto CGambitsContainer::Tick(timer::time_point tick) -> Task } else if (action.select == G_SELECT::MB_ELEMENT) { - CStatusEffect* PSCEffect = resolvedTarget->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0); + CStatusEffect* PSCEffect = resolvedTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0); if (PSCEffect == nullptr) { return std::nullopt; @@ -701,7 +701,7 @@ auto CGambitsContainer::Tick(timer::time_point tick) -> Task } else if (action.select == G_SELECT::MB_ELEMENT) { - CStatusEffect* PSCEffect = target->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0); + CStatusEffect* PSCEffect = target->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0); if (PSCEffect == nullptr) { @@ -1070,12 +1070,12 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G } case G_CONDITION::STATUS: { - predicateResults.push_back(triggerTarget->StatusEffectContainer->HasStatusEffect(static_cast(predicate.condition_arg))); + predicateResults.push_back(triggerTarget->StatusEffectContainer->HasStatusEffect(static_cast(predicate.condition_arg))); continue; } case G_CONDITION::NOT_STATUS: { - predicateResults.push_back(!triggerTarget->StatusEffectContainer->HasStatusEffect(static_cast(predicate.condition_arg))); + predicateResults.push_back(!triggerTarget->StatusEffectContainer->HasStatusEffect(static_cast(predicate.condition_arg))); continue; } case G_CONDITION::TIMER: @@ -1158,8 +1158,8 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G case G_CONDITION::NO_SAMBA: { bool noSamba = true; - if (triggerTarget->StatusEffectContainer->HasStatusEffect(EFFECT_DRAIN_SAMBA) || - triggerTarget->StatusEffectContainer->HasStatusEffect(EFFECT_HASTE_SAMBA)) + if (triggerTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DrainSamba) || + triggerTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::HasteSamba)) { noSamba = false; } @@ -1172,22 +1172,22 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G // clang-format off if (triggerTarget->StatusEffectContainer->HasStatusEffect( { - EFFECT_FIRESTORM, - EFFECT_HAILSTORM, - EFFECT_WINDSTORM, - EFFECT_SANDSTORM, - EFFECT_THUNDERSTORM, - EFFECT_RAINSTORM, - EFFECT_AURORASTORM, - EFFECT_VOIDSTORM, - EFFECT_FIRESTORM_II, - EFFECT_HAILSTORM_II, - EFFECT_WINDSTORM_II, - EFFECT_SANDSTORM_II, - EFFECT_THUNDERSTORM_II, - EFFECT_RAINSTORM_II, - EFFECT_AURORASTORM_II, - EFFECT_VOIDSTORM_II, + xi::StatusEffect::Firestorm, + xi::StatusEffect::Hailstorm, + xi::StatusEffect::Windstorm, + xi::StatusEffect::Sandstorm, + xi::StatusEffect::Thunderstorm, + xi::StatusEffect::Rainstorm, + xi::StatusEffect::Aurorastorm, + xi::StatusEffect::Voidstorm, + xi::StatusEffect::FirestormIi, + xi::StatusEffect::HailstormIi, + xi::StatusEffect::WindstormIi, + xi::StatusEffect::SandstormIi, + xi::StatusEffect::ThunderstormIi, + xi::StatusEffect::RainstormIi, + xi::StatusEffect::AurorastormIi, + xi::StatusEffect::VoidstormIi, })) { noStorm = false; @@ -1208,7 +1208,7 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G } case G_CONDITION::STATUS_FLAG: { - predicateResults.push_back(triggerTarget->StatusEffectContainer->HasStatusEffectByFlag(static_cast(predicate.condition_arg))); + predicateResults.push_back(triggerTarget->StatusEffectContainer->HasStatusEffectByFlag(static_cast(predicate.condition_arg))); continue; } case G_CONDITION::HAS_TOP_ENMITY: @@ -1223,25 +1223,25 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G } case G_CONDITION::SC_AVAILABLE: { - auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); predicateResults.push_back(PSCEffect && PSCEffect->GetStartTime() + 3s < timer::now() && PSCEffect->GetTier() == 0); continue; } case G_CONDITION::NOT_SC_AVAILABLE: { - auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); predicateResults.push_back(PSCEffect == nullptr); continue; } case G_CONDITION::MB_AVAILABLE: { - auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); predicateResults.push_back(PSCEffect && PSCEffect->GetStartTime() + 3s < timer::now() && PSCEffect->GetTier() > 0); continue; } case G_CONDITION::LUNGE_MB_AVAILABLE: { - auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = triggerTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); bool maybeUseLunge = false; if (PSCEffect && PSCEffect->GetStartTime() + 3s < timer::now() && PSCEffect->GetTier() > 0) @@ -1259,10 +1259,10 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G { if (POwner->StatusEffectContainer->HasStatusEffect( { - EFFECT_LUX, - EFFECT_IGNIS, - EFFECT_FLABRA, - EFFECT_SULPOR, + xi::StatusEffect::Lux, + xi::StatusEffect::Ignis, + xi::StatusEffect::Flabra, + xi::StatusEffect::Sulpor, })) { maybeUseLunge = true; @@ -1272,10 +1272,10 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G { if (POwner->StatusEffectContainer->HasStatusEffect( { - EFFECT_TENEBRAE, - EFFECT_TELLUS, - EFFECT_UNDA, - EFFECT_GELUS, + xi::StatusEffect::Tenebrae, + xi::StatusEffect::Tellus, + xi::StatusEffect::Unda, + xi::StatusEffect::Gelus, })) { maybeUseLunge = true; @@ -1377,22 +1377,22 @@ bool CGambitsContainer::CheckTrigger(const CBattleEntity* triggerTarget, const G switch (spellElement) { case ELEMENT_FIRE: - needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(EFFECT_BARFIRE); + needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Barfire); break; case ELEMENT_ICE: - needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(EFFECT_BARBLIZZARD); + needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Barblizzard); break; case ELEMENT_WIND: - needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(EFFECT_BARAERO); + needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Baraero); break; case ELEMENT_EARTH: - needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(EFFECT_BARSTONE); + needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Barstone); break; case ELEMENT_THUNDER: - needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(EFFECT_BARTHUNDER); + needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Barthunder); break; case ELEMENT_WATER: - needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(EFFECT_BARWATER); + needBarEffect = !POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Barwater); break; default: needBarEffect = false; @@ -1581,7 +1581,7 @@ bool CGambitsContainer::TryTrustSkill() } case G_TP_TRIGGER::CLOSER: // Hold TP indefinitely to close a SC. { - auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); // TODO: ...and has a valid WS... @@ -1598,7 +1598,7 @@ bool CGambitsContainer::TryTrustSkill() { return true; // Time to WS! } - auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); // TODO: ...and has a valid WS... @@ -1621,7 +1621,7 @@ bool CGambitsContainer::TryTrustSkill() { case G_SELECT::RANDOM: { - auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); if (!PSCEffect) // Opener, if no skillchain available select a random ws { @@ -1658,7 +1658,7 @@ bool CGambitsContainer::TryTrustSkill() } case G_SELECT::HIGHEST: // Form the best possible skillchain { - auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN); + auto* PSCEffect = target->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain); if (!PSCEffect) // Opener { diff --git a/src/map/ai/states/ability_state.cpp b/src/map/ai/states/ability_state.cpp index 3827609c995..d8ee59c768c 100644 --- a/src/map/ai/states/ability_state.cpp +++ b/src/map/ai/states/ability_state.cpp @@ -253,8 +253,8 @@ bool CAbilityState::CanUseAbility() return false; } - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_AMNESIA) || - (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_IMPAIRMENT) && (PChar->StatusEffectContainer->GetStatusEffect(EFFECT_IMPAIRMENT)->GetPower() == 0x01 || PChar->StatusEffectContainer->GetStatusEffect(EFFECT_IMPAIRMENT)->GetPower() == 0x03)) || + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Amnesia) || + (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Impairment) && (PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Impairment)->GetPower() == 0x01 || PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Impairment)->GetPower() == 0x03)) || (!PAbility->isPetAbility() && !charutils::hasAbility(PChar, PAbility->getID())) || (PAbility->isPetAbility() && PAbility->getID() >= ABILITY_HEALING_RUBY && !charutils::hasPetAbility(PChar, PAbility->getID() - ABILITY_HEALING_RUBY))) { @@ -300,9 +300,9 @@ bool CAbilityState::CanUseAbility() else { bool cancelAbility = false; - bool hasAmnesia = m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_AMNESIA); - bool hasImpairment = m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_IMPAIRMENT); - uint16 impairmentPower = hasImpairment ? m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_IMPAIRMENT)->GetPower() : 0; + bool hasAmnesia = m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Amnesia); + bool hasImpairment = m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Impairment); + uint16 impairmentPower = hasImpairment ? m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Impairment)->GetPower() : 0; if (!PTarget) { diff --git a/src/map/ai/states/death_state.cpp b/src/map/ai/states/death_state.cpp index 3024a4df1bd..93c51acba04 100644 --- a/src/map/ai/states/death_state.cpp +++ b/src/map/ai/states/death_state.cpp @@ -42,7 +42,7 @@ CDeathState::CDeathState(CBattleEntity* PEntity, timer::duration death_time) , m_deathTime(death_time) , m_raiseTime(GetEntryTime() + TIME_TO_SEND_RERAISE_MENU) { - m_PEntity->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DEATH, EffectNotice::Silent); + m_PEntity->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Death, EffectNotice::Silent); m_PEntity->animation = ANIMATION_DEATH; m_PEntity->updatemask |= UPDATE_HP; diff --git a/src/map/ai/states/inactive_state.cpp b/src/map/ai/states/inactive_state.cpp index e25432b6ba8..98d060608dc 100644 --- a/src/map/ai/states/inactive_state.cpp +++ b/src/map/ai/states/inactive_state.cpp @@ -47,7 +47,7 @@ bool CInactiveState::Update(timer::time_point tick) } if (!PBattleEntity->StatusEffectContainer->HasPreventActionEffect() || - (PBattleEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_CHARM, EFFECT_CHARM_II }) && !PBattleEntity->StatusEffectContainer->HasPreventActionEffect(true))) + (PBattleEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::CharmI, xi::StatusEffect::CharmIi }) && !PBattleEntity->StatusEffectContainer->HasPreventActionEffect(true))) { return true; } diff --git a/src/map/ai/states/magic_state.cpp b/src/map/ai/states/magic_state.cpp index 34a961b7802..efa5d15c7f7 100644 --- a/src/map/ai/states/magic_state.cpp +++ b/src/map/ai/states/magic_state.cpp @@ -332,15 +332,15 @@ bool CMagicState::CanCastSpell(CBattleEntity* PTarget, bool isEndOfCast) return false; } - if (m_PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_SILENCE, EFFECT_MUTE })) + if (m_PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Silence, xi::StatusEffect::Mute })) { m_errorMsg = std::make_unique(m_PEntity, m_PEntity, static_cast(m_PSpell->getID()), 0, MsgBasic::UnableToCastSpells); return false; } - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_OMERTA)) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Omerta)) { - int16 power = m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_OMERTA)->GetPower(); + int16 power = m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Omerta)->GetPower(); if ((1 << (m_PSpell->getSpellGroup() - 1)) & power) { m_errorMsg = std::make_unique(m_PEntity, m_PEntity, static_cast(m_PSpell->getID()), 0, MsgBasic::UnableToCastSpells); @@ -382,7 +382,7 @@ bool CMagicState::CanCastSpell(CBattleEntity* PTarget, bool isEndOfCast) // Entrust has a 25 yalm range for Indi spells (not affected by hitboxes) const auto spellFamily = m_PSpell->getSpellFamily(); - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_ENTRUST) && + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Entrust) && (spellFamily == SPELLFAMILY_INDI_BUFF || spellFamily == SPELLFAMILY_INDI_DEBUFF)) { spellRange = 25.0f; @@ -445,7 +445,7 @@ void CMagicState::SpendCost() battleutils::HasNinjaTool(m_PEntity, GetSpell(), true); } } - else if (m_PSpell->hasMPCost() && !m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_MANAFONT) && !(m_flags & MAGICFLAGS_IGNORE_MP)) + else if (m_PSpell->hasMPCost() && !m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Manafont) && !(m_flags & MAGICFLAGS_IGNORE_MP)) { int16 cost = battleutils::CalculateSpellCost(m_PEntity, GetSpell()); @@ -471,7 +471,7 @@ void CMagicState::SpendCost() timer::duration CMagicState::GetRecast() { - if (!m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_CHAINSPELL) && !m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_SPONTANEITY) && + if (!m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Chainspell) && !m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Spontaneity) && !m_instantCast) { return battleutils::CalculateSpellRecastTime(m_PEntity, GetSpell()); @@ -483,14 +483,14 @@ void CMagicState::ApplyEnmity(CBattleEntity* PTarget, int ce, int ve) { bool enmityApplied = false; - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_TRANQUILITY) && m_PSpell->getSpellGroup() == SPELLGROUP_WHITE) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Tranquility) && m_PSpell->getSpellGroup() == SPELLGROUP_WHITE) { - m_PEntity->addModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_TRANQUILITY)->GetPower()); + m_PEntity->addModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Tranquility)->GetPower()); } - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_EQUANIMITY) && m_PSpell->getSpellGroup() == SPELLGROUP_BLACK) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Equanimity) && m_PSpell->getSpellGroup() == SPELLGROUP_BLACK) { - m_PEntity->addModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_EQUANIMITY)->GetPower()); + m_PEntity->addModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Equanimity)->GetPower()); } if (m_PSpell->isNa()) @@ -499,23 +499,23 @@ void CMagicState::ApplyEnmity(CBattleEntity* PTarget, int ce, int ve) } // Subtle Sorcery sets Cumulative Enmity of spells to 0 - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_SUBTLE_SORCERY)) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SubtleSorcery)) { ce = 0; } // If The player is under the effect of Yonin, the Base Enmity generated by Utsusemi spells is increased. - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_YONIN) && m_PSpell->getSpellFamily() == SPELLFAMILY_UTSUSEMI && + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Yonin) && m_PSpell->getSpellFamily() == SPELLFAMILY_UTSUSEMI && m_PEntity->getMod(Mod::YONIN_UTSUSEMI_ENMITY) > 0) { ce = 160; ve = 480; } - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_DIVINE_EMBLEM) && m_PSpell->getSkillType() == SKILL_DIVINE_MAGIC) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DivineEmblem) && m_PSpell->getSkillType() == SKILL_DIVINE_MAGIC) { - ve = ve * (1.0f + (m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_DIVINE_EMBLEM)->GetPower() / 100.0f)); - ce = ce * (1.0f + (m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_DIVINE_EMBLEM)->GetPower() / 100.0f)); + ve = ve * (1.0f + (m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::DivineEmblem)->GetPower() / 100.0f)); + ce = ce * (1.0f + (m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::DivineEmblem)->GetPower() / 100.0f)); } if (PTarget != nullptr) @@ -562,23 +562,23 @@ void CMagicState::ApplyEnmity(CBattleEntity* PTarget, int ce, int ve) } } - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_TRANQUILITY) && m_PSpell->getSpellGroup() == SPELLGROUP_WHITE) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Tranquility) && m_PSpell->getSpellGroup() == SPELLGROUP_WHITE) { - m_PEntity->delModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_TRANQUILITY)->GetPower()); + m_PEntity->delModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Tranquility)->GetPower()); if (enmityApplied) { - m_PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_TRANQUILITY); + m_PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Tranquility); } } - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_EQUANIMITY) && m_PSpell->getSpellGroup() == SPELLGROUP_BLACK) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Equanimity) && m_PSpell->getSpellGroup() == SPELLGROUP_BLACK) { - m_PEntity->delModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_EQUANIMITY)->GetPower()); + m_PEntity->delModifier(Mod::ENMITY, -m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Equanimity)->GetPower()); if (enmityApplied) { - m_PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_EQUANIMITY); + m_PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Equanimity); } } @@ -587,11 +587,11 @@ void CMagicState::ApplyEnmity(CBattleEntity* PTarget, int ce, int ve) m_PEntity->delModifier(Mod::ENMITY, -(m_PEntity->getMod(Mod::DIVINE_BENISON) >> 1)); // Half of divine benison mod amount = -enmity } - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_DIVINE_EMBLEM) && + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DivineEmblem) && m_PSpell->getSkillType() == SKILL_DIVINE_MAGIC && enmityApplied) { - m_PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_DIVINE_EMBLEM); + m_PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::DivineEmblem); } } diff --git a/src/map/ai/states/mobskill_state.cpp b/src/map/ai/states/mobskill_state.cpp index 24a03bcba30..d9cc78430c1 100644 --- a/src/map/ai/states/mobskill_state.cpp +++ b/src/map/ai/states/mobskill_state.cpp @@ -45,7 +45,7 @@ CMobSkillState::CMobSkillState(CBattleEntity* PEntity, uint16 targid, uint16 wsi throw CStateInitException(nullptr); } - if (m_PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_AMNESIA, EFFECT_IMPAIRMENT })) + if (m_PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Amnesia, xi::StatusEffect::Impairment })) { throw CStateInitException(nullptr); } @@ -135,12 +135,12 @@ void CMobSkillState::SpendCost() { if (!m_PSkill->isTpFreeSkill()) { - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_SEKKANOKI)) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sekkanoki)) { m_spentTP = m_PEntity->addTP(-1000); - m_PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_SEKKANOKI); + m_PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Sekkanoki); } - else if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_MEIKYO_SHISUI) && + else if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::MeikyoShisui) && m_PEntity->GetLocalVar("[MeikyoShisui]MobSkillCount") > 0) { auto currentCount = m_PEntity->GetLocalVar("[MeikyoShisui]MobSkillCount"); @@ -172,7 +172,7 @@ bool CMobSkillState::Update(timer::time_point tick) if (m_PEntity && m_PEntity->isAlive() && (tick >= GetEntryTime() + m_castTime && !IsCompleted())) { // Check for stun/sleep/hysteria/etc at the moment of skill completion - Cleanup handles the interrupt - if (m_PEntity->StatusEffectContainer->HasPreventActionEffect() || m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_HYSTERIA)) + if (m_PEntity->StatusEffectContainer->HasPreventActionEffect() || m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hysteria)) { return true; } @@ -218,13 +218,13 @@ bool CMobSkillState::Update(timer::time_point tick) if (m_PEntity->objtype == TYPE_PET && m_PEntity->PMaster && m_PEntity->PMaster->objtype == TYPE_PC && (m_PSkill->isBloodPactRage() || m_PSkill->isBloodPactWard())) { CCharEntity* PSummoner = dynamic_cast(m_PEntity->PMaster); - if (PSummoner && PSummoner->StatusEffectContainer->HasStatusEffect(EFFECT_AVATARS_FAVOR)) + if (PSummoner && PSummoner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AvatarsFavor)) { - auto power = PSummoner->StatusEffectContainer->GetStatusEffect(EFFECT_AVATARS_FAVOR)->GetPower(); + auto power = PSummoner->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AvatarsFavor)->GetPower(); // Retail: Power is gained for BP use auto levelGained = m_PSkill->isBloodPactRage() ? 3 : 2; power += levelGained; - PSummoner->StatusEffectContainer->GetStatusEffect(EFFECT_AVATARS_FAVOR)->SetPower(power > 11 ? power : 11); + PSummoner->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AvatarsFavor)->SetPower(power > 11 ? power : 11); } } diff --git a/src/map/ai/states/petskill_state.cpp b/src/map/ai/states/petskill_state.cpp index 4d2e974d8f8..9bf9f668feb 100644 --- a/src/map/ai/states/petskill_state.cpp +++ b/src/map/ai/states/petskill_state.cpp @@ -42,7 +42,7 @@ CPetSkillState::CPetSkillState(CPetEntity* PEntity, uint16 targid, uint16 wsid) throw CStateInitException(nullptr); } - if (m_PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_AMNESIA, EFFECT_IMPAIRMENT })) + if (m_PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Amnesia, xi::StatusEffect::Impairment })) { throw CStateInitException(nullptr); } @@ -150,13 +150,13 @@ bool CPetSkillState::Update(timer::time_point tick) if (m_PEntity->objtype == TYPE_PET && m_PEntity->PMaster && m_PEntity->PMaster->objtype == TYPE_PC && (m_PSkill->isBloodPactRage() || m_PSkill->isBloodPactWard())) { CCharEntity* PSummoner = dynamic_cast(m_PEntity->PMaster); - if (PSummoner && PSummoner->StatusEffectContainer->HasStatusEffect(EFFECT_AVATARS_FAVOR)) + if (PSummoner && PSummoner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AvatarsFavor)) { - auto power = PSummoner->StatusEffectContainer->GetStatusEffect(EFFECT_AVATARS_FAVOR)->GetPower(); + auto power = PSummoner->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AvatarsFavor)->GetPower(); // Retail: Power is gained for BP use auto levelGained = m_PSkill->isBloodPactRage() ? 3 : 2; power += levelGained; - PSummoner->StatusEffectContainer->GetStatusEffect(EFFECT_AVATARS_FAVOR)->SetPower(power > 11 ? power : 11); + PSummoner->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AvatarsFavor)->SetPower(power > 11 ? power : 11); } if (PTarget && m_PEntity->getPetType() == PET_TYPE::AVATAR && (m_PEntity->m_PetID != PETID_ALEXANDER && m_PEntity->m_PetID != PETID_ATOMOS)) diff --git a/src/map/ai/states/range_state.cpp b/src/map/ai/states/range_state.cpp index f8079cbac37..44e8f7b2708 100644 --- a/src/map/ai/states/range_state.cpp +++ b/src/map/ai/states/range_state.cpp @@ -242,7 +242,7 @@ bool CRangeState::CanUseRangedAttack(CBattleEntity* PTarget, bool isEndOfAttack) case SKILL_THROWING: { // remove barrage, doesn't work here - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_BARRAGE); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Barrage); break; } case SKILL_ARCHERY: diff --git a/src/map/ai/states/weaponskill_state.cpp b/src/map/ai/states/weaponskill_state.cpp index 742ee81be85..e120282fc57 100644 --- a/src/map/ai/states/weaponskill_state.cpp +++ b/src/map/ai/states/weaponskill_state.cpp @@ -92,14 +92,14 @@ CWeaponSkill* CWeaponSkillState::GetSkill() void CWeaponSkillState::SpendCost() { auto tp = 0; - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_MEIKYO_SHISUI)) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::MeikyoShisui)) { tp = m_PEntity->addTP(-1000); } - else if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_SEKKANOKI)) + else if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sekkanoki)) { tp = m_PEntity->addTP(-1000); - m_PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_SEKKANOKI); + m_PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Sekkanoki); } else { @@ -144,11 +144,11 @@ bool CWeaponSkillState::Update(timer::time_point tick) } // Reset Restraint bonus and trackers on weaponskill use - if (m_PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_RESTRAINT)) + if (m_PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Restraint)) { - uint16 WSBonus = m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT)->GetPower(); - m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT)->SetPower(0); - m_PEntity->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT)->SetSubPower(0); + uint16 WSBonus = m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Restraint)->GetPower(); + m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Restraint)->SetPower(0); + m_PEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Restraint)->SetSubPower(0); m_PEntity->delModifier(Mod::ALL_WSDMG_FIRST_HIT, WSBonus); } diff --git a/src/map/attack.cpp b/src/map/attack.cpp index 0281e99448f..f590def4f83 100644 --- a/src/map/attack.cpp +++ b/src/map/attack.cpp @@ -93,7 +93,7 @@ void CAttack::SetCritical(bool value) if (m_attacker->StatusEffectContainer) { - const CStatusEffect* sangeEffect = m_attacker->StatusEffectContainer->GetStatusEffect(EFFECT_SANGE); + const CStatusEffect* sangeEffect = m_attacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Sange); CCharEntity* PChar = dynamic_cast(m_attacker); if (sangeEffect && PChar && PChar->PMeritPoints) @@ -111,7 +111,7 @@ void CAttack::SetCritical(bool value) float attBonus = 1.0f; if (m_attackType == PHYSICAL_ATTACK_TYPE::KICK) { - if (CStatusEffect* footworkEffect = m_attacker->StatusEffectContainer->GetStatusEffect(EFFECT_FOOTWORK)) + if (CStatusEffect* footworkEffect = m_attacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Footwork)) { attBonus += (footworkEffect->GetSubPower() / 256.0f); // Mod is out of 256 } @@ -207,12 +207,12 @@ bool CAttack::IsAnticipated() const bool CAttack::IsDeflected() const { - if (!m_victim->StatusEffectContainer->HasStatusEffect(EFFECT_DEFENSE_BOOST)) + if (!m_victim->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DefenseBoost)) { return false; } - uint16 subpower = m_victim->StatusEffectContainer->GetStatusEffect(EFFECT_DEFENSE_BOOST)->GetSubPower(); + uint16 subpower = m_victim->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::DefenseBoost)->GetSubPower(); if (subpower == 0) { return false; @@ -315,7 +315,7 @@ uint8 CAttack::GetHitRate() if (m_attacker->StatusEffectContainer) { - const CStatusEffect* sangeEffect = m_attacker->StatusEffectContainer->GetStatusEffect(EFFECT_SANGE); + const CStatusEffect* sangeEffect = m_attacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Sange); CCharEntity* PChar = dynamic_cast(m_attacker); if (sangeEffect && PChar && PChar->PMeritPoints) { @@ -386,7 +386,7 @@ bool CAttack::CheckAnticipated() } // bail out before hitting lua if we dont have TE - CStatusEffect* thirdEyeEffect = m_victim->StatusEffectContainer->GetStatusEffect(EFFECT_THIRD_EYE, 0); + CStatusEffect* thirdEyeEffect = m_victim->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::ThirdEye, 0); if (thirdEyeEffect == nullptr) { return false; @@ -462,7 +462,7 @@ bool CAttack::CheckCounter() auto* PChar = static_cast(m_victim); auto* weapon = dynamic_cast(PChar->m_Weapons[SLOT_MAIN]); bool isValid2HandWeapon = weapon && weapon->isTwoHanded(); - bool hasValidSeigan = isValid2HandWeapon && PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SEIGAN, 0); + bool hasValidSeigan = isValid2HandWeapon && PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Seigan, 0); if (hasValidSeigan) { @@ -473,7 +473,7 @@ bool CAttack::CheckCounter() } // Do not counter if PD is up - if (!m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_PERFECT_DODGE)) + if (!m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::PerfectDodge)) { if ((xirand::GetRandomNumber(100) < std::clamp(m_victim->getMod(Mod::COUNTER) + meritCounter, 0, 80) || xirand::GetRandomNumber(100) < seiganChance) && @@ -489,7 +489,7 @@ bool CAttack::CheckCounter() m_attacker->PAI->EventHandler.triggerListener("MELEE_SWING_MISS", m_attacker, m_victim, this); } } - else if (m_victim->StatusEffectContainer->HasStatusEffect(EFFECT_PERFECT_COUNTER)) + else if (m_victim->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::PerfectCounter)) { // Perfect Counter only counters hits that normal counter misses, always critical, can counter 1-3 times before wearing // TODO: Perfect Counter can negate an attack even if it misses (No accuracy check yet) @@ -497,7 +497,7 @@ bool CAttack::CheckCounter() m_isCritical = true; // TODO: Implement VIT-based formula for Perfect Counter wearing off, and add JP bonus - m_victim->StatusEffectContainer->DelStatusEffect(EFFECT_PERFECT_COUNTER); + m_victim->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::PerfectCounter); } } return m_isCountered; @@ -534,9 +534,9 @@ void CAttack::ProcessDamage() if (settings::get("map.ENABLE_AUTO_ATTACK_LUA")) { // Sneak attack. - if (m_attacker->GetMJob() == JOB_THF && m_isFirstSwing && m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK_ATTACK) && - (behind(m_attacker->loc.p, m_victim->loc.p, 64) || m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_HIDE) || - m_victim->StatusEffectContainer->HasStatusEffect(EFFECT_DOUBT))) + if (m_attacker->GetMJob() == JOB_THF && m_isFirstSwing && m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SneakAttack) && + (behind(m_attacker->loc.p, m_victim->loc.p, 64) || m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hide) || + m_victim->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Doubt))) { m_isSA = true; } @@ -548,9 +548,9 @@ void CAttack::ProcessDamage() } // Set attack type to Samba if the attack type is normal. Don't overwrite other types. Used for Samba double damage. - if (m_attackType == PHYSICAL_ATTACK_TYPE::NORMAL && (m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_DRAIN_SAMBA) || - m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_ASPIR_SAMBA) || - m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_HASTE_SAMBA))) + if (m_attackType == PHYSICAL_ATTACK_TYPE::NORMAL && (m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DrainSamba) || + m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AspirSamba) || + m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::HasteSamba))) { SetAttackType(PHYSICAL_ATTACK_TYPE::SAMBA); } @@ -595,9 +595,9 @@ void CAttack::ProcessDamage() } // Sneak attack. - if (m_attacker->GetMJob() == JOB_THF && m_isFirstSwing && m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK_ATTACK) && - (behind(m_attacker->loc.p, m_victim->loc.p, 64) || m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_HIDE) || - m_victim->StatusEffectContainer->HasStatusEffect(EFFECT_DOUBT))) + if (m_attacker->GetMJob() == JOB_THF && m_isFirstSwing && m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SneakAttack) && + (behind(m_attacker->loc.p, m_victim->loc.p, 64) || m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hide) || + m_victim->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Doubt))) { m_bonusBasePhysicalDamage += static_cast(m_attacker->DEX()) * (1.0f + std::max(m_attacker->getMod(Mod::SNEAK_ATK_DEX) / 100.0f, 0.f)); m_isSA = true; @@ -691,10 +691,10 @@ void CAttack::ProcessDamage() } // Apply Scarlet Delirium damage bonus - // EFFECT_SCARLET_DELIRIUM_1 is only active after damage has been dealt to the DRK and EFFECT_SCARLET_DELIRIUM has been removed. - if (m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_SCARLET_DELIRIUM_1)) + // xi::StatusEffect::ScarletDelirium1 is only active after damage has been dealt to the DRK and xi::StatusEffect::ScarletDelirium has been removed. + if (m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::ScarletDelirium1)) { - float effectPower = 1.0f + static_cast(m_attacker->StatusEffectContainer->GetStatusEffect(EFFECT_SCARLET_DELIRIUM_1)->GetPower()) / 1000.0f; + float effectPower = 1.0f + static_cast(m_attacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::ScarletDelirium1)->GetPower()) / 1000.0f; m_damage = std::floor(m_damage * std::max(effectPower, 0.f)); } @@ -716,9 +716,9 @@ void CAttack::ProcessDamage() } // Set attack type to Samba if the attack type is normal. Don't overwrite other types. Used for Samba double damage. - if (m_attackType == PHYSICAL_ATTACK_TYPE::NORMAL && (m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_DRAIN_SAMBA) || - m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_ASPIR_SAMBA) || - m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_HASTE_SAMBA))) + if (m_attackType == PHYSICAL_ATTACK_TYPE::NORMAL && (m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DrainSamba) || + m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AspirSamba) || + m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::HasteSamba))) { SetAttackType(PHYSICAL_ATTACK_TYPE::SAMBA); } @@ -730,13 +730,13 @@ void CAttack::ProcessDamage() } // Apply Sneak Attack Augment Mod - if (m_attacker->getMod(Mod::AUGMENTS_SA) > 0 && IsSneakAttack() && m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK_ATTACK)) + if (m_attacker->getMod(Mod::AUGMENTS_SA) > 0 && IsSneakAttack() && m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SneakAttack)) { m_damage = std::floor(m_damage * (1.0f + std::max(m_attacker->getMod(Mod::AUGMENTS_SA) / 100.0f, 0.f))); } // Apply Trick Attack Augment Mod - if (m_attacker->getMod(Mod::AUGMENTS_TA) > 0 && IsTrickAttack() && m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_TRICK_ATTACK)) + if (m_attacker->getMod(Mod::AUGMENTS_TA) > 0 && IsTrickAttack() && m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TrickAttack)) { m_damage = std::floor(m_damage * (1.0f + std::max(m_attacker->getMod(Mod::AUGMENTS_TA) / 100.0f, 0.f))); } @@ -776,9 +776,9 @@ void CAttack::ProcessDamage() // Apply Restraint Weaponskill Damage Modifier // Effect power tracks the total bonus // Effect sub power tracks remainder left over from whole percentage flooring - if (m_isFirstSwing && m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_RESTRAINT)) + if (m_isFirstSwing && m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Restraint)) { - CStatusEffect* effect = m_attacker->StatusEffectContainer->GetStatusEffect(EFFECT_RESTRAINT); + CStatusEffect* effect = m_attacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Restraint); if (effect == nullptr) { diff --git a/src/map/attackround.cpp b/src/map/attackround.cpp index 98524462d22..4aff9f963f7 100644 --- a/src/map/attackround.cpp +++ b/src/map/attackround.cpp @@ -94,7 +94,7 @@ CAttackRound::CAttackRound(CBattleEntity* attacker, CBattleEntity* defender) m_attackSwings[0].SetAsFirstSwing(); // Delete the haste samba effect. - attacker->StatusEffectContainer->DelStatusEffect(EFFECT_HASTE_SAMBA_HASTE); + attacker->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::HasteSambaHaste); } /************************************************************************ @@ -319,7 +319,7 @@ void CAttackRound::CreateAttacks(CItemWeapon* PWeapon, PHYSICAL_ATTACK_DIRECTION // Daken is handled separately in CreateDakenAttack() and Zanshin in src/map/entities/battleentity.cpp#L1768 // Checking Mikage Effect - Hits Vary With Num of Utsusemi Shadows for Main Weapon - if (m_attacker->StatusEffectContainer->HasStatusEffect(EFFECT_MIKAGE) && m_attacker->m_Weapons[SLOT_MAIN] && m_attacker->m_Weapons[SLOT_MAIN]->getID() == PWeapon->getID()) + if (m_attacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Mikage) && m_attacker->m_Weapons[SLOT_MAIN] && m_attacker->m_Weapons[SLOT_MAIN]->getID() == PWeapon->getID()) { auto shadows = (uint8)m_attacker->getMod(Mod::UTSUSEMI); AddAttackSwing(PHYSICAL_ATTACK_TYPE::NORMAL, direction, shadows); diff --git a/src/map/battlefield.cpp b/src/map/battlefield.cpp index 8ad436569c1..0963e15a94f 100644 --- a/src/map/battlefield.cpp +++ b/src/map/battlefield.cpp @@ -282,19 +282,19 @@ void CBattlefield::ApplyLevelRestrictions(CCharEntity* PChar) const cap = settings::get("main.MAX_LEVEL"); // Cap to server max level to strip buffs - this is the retail diff between uncapped and capped to max lv. } - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DISPELABLE, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_RERAISE); - PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_LEVEL_RESTRICTION, EFFECT_LEVEL_RESTRICTION, cap, 0s, 0s)); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Dispelable, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Reraise); + PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::LevelRestriction, static_cast(xi::StatusEffect::LevelRestriction), cap, 0s, 0s)); } else { - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_LEVEL_RESTRICTION); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::LevelRestriction); } // Check if we should remove SJ, whether or not there is a lv cap. if (!(m_Rules & BCRULES::RULES_ALLOW_SUBJOBS)) { - PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_SJ_RESTRICTION, EFFECT_SJ_RESTRICTION, 0, 0s, 0s)); + PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::SjRestriction, static_cast(xi::StatusEffect::SjRestriction), 0, 0s, 0s)); } } @@ -421,7 +421,7 @@ bool CBattlefield::InsertEntity(CBaseEntity* PEntity, bool enter, BATTLEFIELDMOB // mob, initiator or ally if (entity) { - CStatusEffect* PBattlefieldEffect = entity->StatusEffectContainer->GetStatusEffect(EFFECT_BATTLEFIELD); + CStatusEffect* PBattlefieldEffect = entity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Battlefield); // Update battlefield ID if battlefield effect exists // Tango with a Tracker/Requiem of Sin corner case where NPC IDs are shared between BCs as per retail caps if (PBattlefieldEffect) @@ -431,7 +431,7 @@ bool CBattlefield::InsertEntity(CBaseEntity* PEntity, bool enter, BATTLEFIELDMOB else { entity->StatusEffectContainer->AddStatusEffect( - new CStatusEffect(EFFECT_BATTLEFIELD, EFFECT_BATTLEFIELD, this->GetID(), 0s, 0s, m_Initiator.id, this->GetArea()), EffectNotice::Silent); + new CStatusEffect(xi::StatusEffect::Battlefield, static_cast(xi::StatusEffect::Battlefield), this->GetID(), 0s, 0s, m_Initiator.id, this->GetArea()), EffectNotice::Silent); } } @@ -549,7 +549,7 @@ bool CBattlefield::RemoveEntity(CBaseEntity* PEntity, uint8 leavecode) if (!(m_Rules & BCRULES::RULES_ALLOW_SUBJOBS)) { - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_SJ_RESTRICTION); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::SjRestriction); } // Release charmed pet when master leaves battlefield @@ -565,18 +565,18 @@ bool CBattlefield::RemoveEntity(CBaseEntity* PEntity, uint8 leavecode) { if (PTrust && PTrust->StatusEffectContainer) { - PTrust->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PTrust->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); } } } m_Zone->updateCharLevelRestriction(PChar); - if (leavecode == BATTLEFIELD_LEAVE_CODE_EXIT && PChar->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_CONFRONTATION)) + if (leavecode == BATTLEFIELD_LEAVE_CODE_EXIT && PChar->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Confrontation)) { if (GetStatus() == BATTLEFIELD_STATUS_LOCKED) { - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); } else { @@ -820,7 +820,7 @@ bool CBattlefield::Cleanup(timer::time_point time, bool force) auto* PChar = GetZone()->GetCharByID(id); if (PChar) { - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); m_Zone->updateCharLevelRestriction(PChar); // Remove allies from player's spawn list @@ -835,7 +835,7 @@ bool CBattlefield::Cleanup(timer::time_point time, bool force) if (PChar->PPet) { - PChar->PPet->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->PPet->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); } } } @@ -1010,7 +1010,7 @@ void CBattlefield::handleDeath(CBaseEntity* PEntity) void CBattlefield::setPlayerEntered(CCharEntity* PChar, bool entered) { - CStatusEffect* effect = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_BATTLEFIELD); + CStatusEffect* effect = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Battlefield); if (effect == nullptr) { @@ -1023,15 +1023,15 @@ void CBattlefield::setPlayerEntered(CCharEntity* PChar, bool entered) bool CBattlefield::hasPlayerEntered(CCharEntity* PChar) { - if (!PChar->StatusEffectContainer->HasStatusEffect(EFFECT_BATTLEFIELD)) + if (!PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Battlefield)) { return false; } - return PChar->StatusEffectContainer->GetStatusEffect(EFFECT_BATTLEFIELD)->GetTier() == 1; + return PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Battlefield)->GetTier() == 1; } uint16 CBattlefield::getBattlefieldArea(CCharEntity* PChar) { - return PChar->StatusEffectContainer->GetStatusEffect(EFFECT_BATTLEFIELD)->GetSubPower(); + return PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Battlefield)->GetSubPower(); } diff --git a/src/map/battlefield_handler.cpp b/src/map/battlefield_handler.cpp index 3c775691537..5e34a6ea01c 100644 --- a/src/map/battlefield_handler.cpp +++ b/src/map/battlefield_handler.cpp @@ -92,7 +92,7 @@ void CBattlefieldHandler::HandleBattlefields(timer::time_point tick) if (PChar) { luautils::OnBattlefieldKick(PChar); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); m_PZone->updateCharLevelRestriction(PChar); } iter = m_orphanedPlayers.erase(iter); @@ -153,10 +153,10 @@ uint8 CBattlefieldHandler::LoadBattlefield(CCharEntity* PChar, const Battlefield m_Battlefields.insert(std::make_pair(area, std::move(battlefield))); auto* PBattlefield = m_Battlefields[area].get(); - if (!PChar->StatusEffectContainer->GetStatusEffect(EFFECT_BATTLEFIELD)) + if (!PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Battlefield)) { PChar->StatusEffectContainer->AddStatusEffect( - new CStatusEffect(EFFECT_BATTLEFIELD, EFFECT_BATTLEFIELD, PBattlefield->GetID(), 0s, 0s, PChar->id, PBattlefield->GetArea()), EffectNotice::Silent); + new CStatusEffect(xi::StatusEffect::Battlefield, static_cast(xi::StatusEffect::Battlefield), PBattlefield->GetID(), 0s, 0s, PChar->id, PBattlefield->GetArea()), EffectNotice::Silent); } luautils::OnBattlefieldRegister(PChar, PBattlefield); @@ -235,7 +235,7 @@ uint8 CBattlefieldHandler::RegisterBattlefield(CCharEntity* PChar, const Battlef if (!PBattlefield) { // ...but they do have the BCNM Status Effect somehow (This should not happen, but keeping to be safe) - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_BATTLEFIELD)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Battlefield)) { // Do not allow them to attain a new registration return BATTLEFIELD_RETURN_CODE_REQS_NOT_MET; @@ -250,7 +250,7 @@ uint8 CBattlefieldHandler::RegisterBattlefield(CCharEntity* PChar, const Battlef } } // If they have a Registered Battlefield -AND- they have the Battlefield Status Effect - if (PBattlefield && PChar->StatusEffectContainer->HasStatusEffect(EFFECT_BATTLEFIELD)) + if (PBattlefield && PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Battlefield)) { // Reset their progress var to 0 and proceed to attempt to enter them into the BCNM PChar->SetLocalVar("[BCNM]EnterExisting", 0); diff --git a/src/map/enmity_container.cpp b/src/map/enmity_container.cpp index 85f183ae54b..7d05aa31756 100644 --- a/src/map/enmity_container.cpp +++ b/src/map/enmity_container.cpp @@ -144,7 +144,7 @@ float CEnmityContainer::CalculateEnmityBonus(CBattleEntity* PEntity) { enmityBonus += PChar->PMeritPoints->GetMeritValue(MERIT_ENMITY_INCREASE, PChar) - PChar->PMeritPoints->GetMeritValue(MERIT_ENMITY_DECREASE, PChar); - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SOULEATER)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Souleater)) { enmityBonus -= PChar->PMeritPoints->GetMeritValue(MERIT_MUTED_SOUL, PChar); } diff --git a/src/map/entities/battleentity.cpp b/src/map/entities/battleentity.cpp index aea44b5b222..f0d322c4004 100644 --- a/src/map/entities/battleentity.cpp +++ b/src/map/entities/battleentity.cpp @@ -438,7 +438,7 @@ uint8 CBattleEntity::UpdateSpeed(bool run) bool CBattleEntity::CanRest() { - return !getMod(Mod::REGEN_DOWN) && !StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_NO_REST); + return !getMod(Mod::REGEN_DOWN) && !StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::NoRest); } bool CBattleEntity::Rest(float rate) @@ -499,7 +499,7 @@ uint32 CBattleEntity::GetWeaponDelay(bool tp) } // Handle Hundred Fists directly. - if (!tp && StatusEffectContainer->HasStatusEffect(EFFECT_HUNDRED_FISTS)) + if (!tp && StatusEffectContainer->HasStatusEffect(xi::StatusEffect::HundredFists)) { finalDelay = std::clamp(weaponDelay - martialArts, 1600, 8000); finalDelay = finalDelay * 0.25f; @@ -1075,7 +1075,7 @@ uint16 CBattleEntity::ATT(SLOTTYPE slot) ATT += STR() * strMultiplier; - if (this->StatusEffectContainer->HasStatusEffect(EFFECT_ENDARK)) + if (this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Endark)) { ATT += this->getMod(Mod::ENSPELL_DMG); } @@ -1121,7 +1121,7 @@ uint16 CBattleEntity::ATT(SLOTTYPE slot) uint16 CBattleEntity::RATT(uint16 bonusAtt) { - auto* PWeakness = StatusEffectContainer->GetStatusEffect(EFFECT_WEAKNESS); + auto* PWeakness = StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Weakness); if (PWeakness && PWeakness->GetPower() >= 2) { return 0; @@ -1212,7 +1212,7 @@ uint16 CBattleEntity::RACC(uint16 bonusAcc) { TracyZoneScoped; - auto* PWeakness = StatusEffectContainer->GetStatusEffect(EFFECT_WEAKNESS); + auto* PWeakness = StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Weakness); if (PWeakness && PWeakness->GetPower() >= 2) { return 1; @@ -1403,7 +1403,7 @@ uint16 CBattleEntity::ACC(uint8 attackNumber, uint16 offsetAccuracy) } ACC = (ACC + m_modStat[Mod::ACC] + offsetAccuracy); - if (this->StatusEffectContainer->HasStatusEffect(EFFECT_ENLIGHT)) + if (this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Enlight)) { ACC += this->getMod(Mod::ENSPELL_DMG); } @@ -1430,7 +1430,7 @@ uint16 CBattleEntity::ACC(uint8 attackNumber, uint16 offsetAccuracy) ACC += std::floor(DEX() * 0.5); ACC += m_modStat[Mod::ACC] + offsetAccuracy; - if (this->StatusEffectContainer->HasStatusEffect(EFFECT_ENLIGHT)) + if (this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Enlight)) { ACC += this->getMod(Mod::ENSPELL_DMG); } @@ -1447,7 +1447,7 @@ uint16 CBattleEntity::ACC(uint8 attackNumber, uint16 offsetAccuracy) { ACC = m_modStat[Mod::ACC] + offsetAccuracy; - if (this->StatusEffectContainer->HasStatusEffect(EFFECT_ENLIGHT)) + if (this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Enlight)) { ACC += this->getMod(Mod::ENSPELL_DMG); } @@ -1529,7 +1529,7 @@ uint16 CBattleEntity::DEF() DEF += m_modStat[Mod::DEF]; // TODO: support old style counterstance - if (this->StatusEffectContainer->HasStatusEffect(EFFECT_COUNTERSTANCE, 0)) + if (this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Counterstance, 0)) { return DEF / 2; } @@ -1576,7 +1576,7 @@ uint8 CBattleEntity::GetMLevel() const JOBTYPE CBattleEntity::GetSJob(bool ignoreRestriction) const { - if (!ignoreRestriction && StatusEffectContainer->HasStatusEffect({ EFFECT_OBLIVISCENCE, EFFECT_SJ_RESTRICTION })) + if (!ignoreRestriction && StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Obliviscence, xi::StatusEffect::SjRestriction })) { return JOB_NON; } @@ -1586,7 +1586,7 @@ JOBTYPE CBattleEntity::GetSJob(bool ignoreRestriction) const uint8 CBattleEntity::GetSLevel() const { - if (StatusEffectContainer->HasStatusEffect({ EFFECT_OBLIVISCENCE, EFFECT_SJ_RESTRICTION })) + if (StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Obliviscence, xi::StatusEffect::SjRestriction })) { return 0; } @@ -2295,11 +2295,11 @@ void CBattleEntity::processActionEffectFlags(const action_t& action) const if (isMainTarget) { // Main hostile target loses DETECTABLE - PTarget->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); + PTarget->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Detectable); } // Every hostile target loses ON_ATTACK - PTarget->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ON_ATTACK); + PTarget->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::OnAttack); // Hostile action cancels fishing on PC targets if (auto* PChar = dynamic_cast(PTarget); PChar && PChar->isFishing()) @@ -2314,7 +2314,7 @@ void CBattleEntity::processActionEffectFlags(const action_t& action) const if (emittedHostile) { // Hostile emit drops actor's ON_ATTACK - this->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ON_ATTACK); + this->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::OnAttack); // ATTACK drops on physical hostile actions: melee/WS confirmed; mobskill/petskill unverified if (action.actiontype == ActionCategory::BasicAttack || @@ -2322,7 +2322,7 @@ void CBattleEntity::processActionEffectFlags(const action_t& action) const action.actiontype == ActionCategory::MobSkillFinish || action.actiontype == ActionCategory::PetSkillFinish) { - this->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ATTACK); + this->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Attack); } } } @@ -2346,15 +2346,15 @@ void CBattleEntity::OnCastFinished(CMagicState& state, action_t& action) state.SpendCost(); // remove effects based on spell cast first - int16 effectFlags = EFFECTFLAG_INVISIBLE | EFFECTFLAG_MAGIC_BEGIN; + auto effectFlags = xi::StatusEffectFlag::Invisible | xi::StatusEffectFlag::MagicBegin; if (PSpell->canTargetEnemy()) { - effectFlags |= EFFECTFLAG_DETECTABLE; + effectFlags |= xi::StatusEffectFlag::Detectable; } StatusEffectContainer->DelStatusEffectsByFlag(effectFlags); - StatusEffectContainer->DelStatusEffect(EFFECT_ILLUSION); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Illusion); PAI->TargetFind->reset(); @@ -2428,8 +2428,8 @@ void CBattleEntity::OnCastFinished(CMagicState& state, action_t& action) // Take all shadows if (PSpell->canTargetEnemy() && (aoeType > SPELLAOE_NONE || (PSpell->getFlag() & SPELLFLAG_WIPE_SHADOWS))) { - PTarget->StatusEffectContainer->DelStatusEffect(EFFECT_BLINK); - PTarget->StatusEffectContainer->DelStatusEffect(EFFECT_COPY_IMAGE); + PTarget->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Blink); + PTarget->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::CopyImage); } // TODO: this is really hacky and should eventually be moved into lua, and spellFlags should probably be in the spells table.. @@ -2449,7 +2449,7 @@ void CBattleEntity::OnCastFinished(CMagicState& state, action_t& action) // Remove Saboteur if (PSpell->getSkillType() == SKILLTYPE::SKILL_ENFEEBLING_MAGIC) { - StatusEffectContainer->DelStatusEffect(EFFECT_SABOTEUR); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Saboteur); } if (msg == MsgBasic::None) @@ -2601,7 +2601,7 @@ void CBattleEntity::OnCastFinished(CMagicState& state, action_t& action) this->processActionEffectFlags(action); - StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_MAGIC_END); + StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::MagicEnd); PRecastContainer->Add(RECAST_MAGIC, static_cast(PSpell->getID()), action.recast); } @@ -3126,8 +3126,8 @@ void CBattleEntity::OnRangedAttack(CRangeState& state, action_t& action) auto ammoConsumed = 0; bool hitOccured = false; // Track if there was a successful hit bool wasCritical = false; // Track if the hit was critical - bool isBarrage = StatusEffectContainer->HasStatusEffect(EFFECT_BARRAGE, 0); - bool isSange = isChar && StatusEffectContainer->HasStatusEffect(EFFECT_SANGE) && getMod(Mod::SANGE_MULTI_HIT) > 0; // Pre-SoA Sange logic check, applied in SoA module + bool isBarrage = StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Barrage, 0); + bool isSange = isChar && StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sange) && getMod(Mod::SANGE_MULTI_HIT) > 0; // Pre-SoA Sange logic check, applied in SoA module // Player Barrage check if (isChar && !ammoThrowing && !rangedThrowing && isBarrage) @@ -3141,7 +3141,7 @@ void CBattleEntity::OnRangedAttack(CRangeState& state, action_t& action) else if (isChar && ammoThrowing && isSange) { int32 shadows = std::clamp(getMod(Mod::UTSUSEMI), 0, 7); - StatusEffectContainer->DelStatusEffect(EFFECT_COPY_IMAGE); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::CopyImage); hitCount += static_cast(shadows); @@ -3150,11 +3150,11 @@ void CBattleEntity::OnRangedAttack(CRangeState& state, action_t& action) hitCount = PAmmo->getQuantity(); } } - else if ((isChar || isTrust) && StatusEffectContainer->HasStatusEffect(EFFECT_TRIPLE_SHOT) && xirand::GetRandomNumber(100) < getMod(Mod::TRIPLE_SHOT_RATE)) + else if ((isChar || isTrust) && StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TripleShot) && xirand::GetRandomNumber(100) < getMod(Mod::TRIPLE_SHOT_RATE)) { hitCount = 3; } - else if ((isChar || isTrust) && StatusEffectContainer->HasStatusEffect(EFFECT_DOUBLE_SHOT) && xirand::GetRandomNumber(100) < getMod(Mod::DOUBLE_SHOT_RATE)) + else if ((isChar || isTrust) && StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DoubleShot) && xirand::GetRandomNumber(100) < getMod(Mod::DOUBLE_SHOT_RATE)) { hitCount = 2; } @@ -3219,17 +3219,17 @@ void CBattleEntity::OnRangedAttack(CRangeState& state, action_t& action) recycleChance += PChar->PJobPoints->GetJobPointValue(JP_AMMO_CONSUMPTION); - if (StatusEffectContainer->HasStatusEffect(EFFECT_UNLIMITED_SHOT)) + if (StatusEffectContainer->HasStatusEffect(xi::StatusEffect::UnlimitedShot)) { recycleChance = 100; if (hitOccured || getMod(Mod::RETAIN_UNLIMITED_SHOT) <= 0) { - StatusEffectContainer->DelStatusEffect(EFFECT_UNLIMITED_SHOT); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::UnlimitedShot); } } - StatusEffectContainer->DelStatusEffect(EFFECT_FLASHY_SHOT); - StatusEffectContainer->DelStatusEffect(EFFECT_STEALTH_SHOT); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::FlashyShot); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::StealthShot); if (PAmmo != nullptr && xirand::GetRandomNumber(100) > recycleChance) { @@ -3378,12 +3378,12 @@ void CBattleEntity::OnRangedAttack(CRangeState& state, action_t& action) // Remove barrage/sange effects after firing if (isBarrage) { - StatusEffectContainer->DelStatusEffectSilent(EFFECT_BARRAGE); + StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Barrage); } if (isSange) { - StatusEffectContainer->DelStatusEffectSilent(EFFECT_SANGE); + StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Sange); } if (isChar || isTrust) @@ -3454,25 +3454,25 @@ void CBattleEntity::OnRangedAttack(CRangeState& state, action_t& action) if (xirand::GetRandomNumber(100) > retainChance) { - StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); + StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Detectable); } else { - StatusEffectContainer->DelStatusEffect(EFFECT_SNEAK); - StatusEffectContainer->DelStatusEffect(EFFECT_DEODORIZE); - StatusEffectContainer->DelStatusEffect(EFFECT_ILLUSION); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Sneak); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Deodorize); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Illusion); } } else { // Camouflage not up, so remove all detectable status effects - StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); + StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Detectable); } } else { // Mob or trust - StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); + StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Detectable); PTarget->LastAttacked = timer::now(); } this->processActionEffectFlags(action); @@ -3549,7 +3549,7 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) list.actorId = PTarget->id; } - if (PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_PERFECT_DODGE, 0)) + if (PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::PerfectDodge, 0)) { actionResult.messageID = MsgBasic::TargetDodges; actionResult.resolution = ActionResolution::Miss; @@ -3560,7 +3560,7 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) actionResult.resolution = ActionResolution::Parry; } else if ((xirand::GetRandomNumber(100) < attack.GetHitRate() || attackRound.GetSATAOccured()) && - !PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_ALL_MISS)) + !PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AllMiss)) { // Check parry. if (attack.CheckParried()) @@ -3641,7 +3641,7 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) // Needs verification, as there appears to be conflicting information regarding an attack bonus based on DEX // vs a base damage increase. float attBonus = 1.0f; - if (PTarget->objtype == TYPE_PC && PTarget->GetMJob() == JOB_MNK && PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_COUNTERSTANCE)) + if (PTarget->objtype == TYPE_PC && PTarget->GetMJob() == JOB_MNK && PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Counterstance)) { auto* PChar = static_cast(PTarget); float csJpModifier = static_cast(PChar->PJobPoints->GetJobPointValue(JP_COUNTERSTANCE_EFFECT) * 2); @@ -3712,16 +3712,16 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) } // Apply Feint - if (CStatusEffect* PFeintEffect = StatusEffectContainer->GetStatusEffect(EFFECT_FEINT)) + if (CStatusEffect* PFeintEffect = StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Feint)) { - if (PTarget->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_EVASION_DOWN, EFFECT_EVASION_DOWN, PFeintEffect->GetPower(), 3s, 30s))) + if (PTarget->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::EvasionDown, static_cast(xi::StatusEffect::EvasionDown), PFeintEffect->GetPower(), 3s, 30s))) { - auto PEffect = PTarget->StatusEffectContainer->GetStatusEffect(EFFECT_EVASION_DOWN); + auto PEffect = PTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::EvasionDown); // When Feint's evasion down effect is on, the target can get "debuffed" with TREASURE_HUNTER_PROC +25% * level above first on Feint PEffect->addMod(Mod::TREASURE_HUNTER_PROC, PFeintEffect->GetSubPower()); } - StatusEffectContainer->DelStatusEffect(EFFECT_FEINT); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Feint); } // Process damage. @@ -3796,7 +3796,7 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) } // if we parried, run battuta check if applicable - if (actionResult.resolution == ActionResolution::Parry && PTarget->StatusEffectContainer->HasStatusEffect(EFFECT_BATTUTA)) + if (actionResult.resolution == ActionResolution::Parry && PTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Battuta)) { battleutils::HandleParrySpikesDamage(this, PTarget, &actionResult, attack.GetDamage()); } @@ -3812,7 +3812,7 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) const bool missedOrCountered = actionResult.resolution != ActionResolution::Hit || actionResult.spikesEffect == ActionReactKind::Counter; const bool normalZanshinProc = missedOrCountered && xirand::GetRandomNumber(100) < zanshinChance; - const bool isSamWithHasso = this->getMod(Mod::HASSO_ZANSHIN_BONUS) > 0 && this->StatusEffectContainer->HasStatusEffect(EFFECT_HASSO); + const bool isSamWithHasso = this->getMod(Mod::HASSO_ZANSHIN_BONUS) > 0 && this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hasso); const bool hassoZanshinProc = isSamWithHasso && xirand::GetRandomNumber(100) < zanshinChance / 4; if (normalZanshinProc || hassoZanshinProc) @@ -3824,7 +3824,7 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) // Remove shuriken if Daken proc and Sange is up if (currentAttackType == PHYSICAL_ATTACK_TYPE::DAKEN) { - if (StatusEffectContainer && StatusEffectContainer->HasStatusEffect(EFFECT_SANGE)) + if (StatusEffectContainer && StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sange)) { auto* PChar = dynamic_cast(this); if (PChar) @@ -3853,7 +3853,7 @@ bool CBattleEntity::OnAttack(CAttackState& state, action_t& action) // End of attack loop ///////////////////////////////////////////////////////////////////////////////////////////// - this->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); + this->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Detectable); this->processActionEffectFlags(action); return true; diff --git a/src/map/entities/charentity.cpp b/src/map/entities/charentity.cpp index 5422e7a98dd..ae0b547130e 100644 --- a/src/map/entities/charentity.cpp +++ b/src/map/entities/charentity.cpp @@ -340,8 +340,8 @@ CCharEntity::~CCharEntity() } } } - StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_SYNC); - StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_RESTRICTION); + StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelSync); + StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelRestriction); } if (PParty && loc.destination != 0 && !inMogHouse()) @@ -1327,8 +1327,8 @@ bool CCharEntity::ValidTarget(CBattleEntity* PInitiator, uint16 targetFlags) bool isSoloPetMaster = PParty == nullptr && PInitiator->PMaster == this; bool targetsParty = targetFlags & TARGET_PLAYER_PARTY; bool targetsAlliance = targetFlags & TARGET_PLAYER_ALLIANCE; - bool hasPianissimo = (targetFlags & TARGET_PLAYER_PARTY_PIANISSIMO) && PInitiator->StatusEffectContainer->HasStatusEffect(EFFECT_PIANISSIMO); - bool hasEntrust = (targetFlags & TARGET_PLAYER_PARTY_ENTRUST) && PInitiator->StatusEffectContainer->HasStatusEffect(EFFECT_ENTRUST); + bool hasPianissimo = (targetFlags & TARGET_PLAYER_PARTY_PIANISSIMO) && PInitiator->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Pianissimo); + bool hasEntrust = (targetFlags & TARGET_PLAYER_PARTY_ENTRUST) && PInitiator->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Entrust); bool isDifferentChar = PInitiator != this; bool isTrust = PInitiator->objtype == TYPE_TRUST; @@ -1412,7 +1412,7 @@ bool CCharEntity::CanAttack(CBattleEntity* PTarget, std::unique_ptrDisengage(); return false; } - else if (!this->StatusEffectContainer->HasStatusEffect({ EFFECT_CHARM, EFFECT_CHARM_II }) && dist > 30) + else if (!this->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::CharmI, xi::StatusEffect::CharmIi }) && dist > 30) { errMsg = std::make_unique(this, PTarget, 0, 0, MsgBasic::LoseSight); PAI->Disengage(); @@ -1453,7 +1453,7 @@ void CCharEntity::OnCastFinished(CMagicState& state, action_t& action) // Only blue spells that act as a physical WS can TA. CBattleEntity* taChar = nullptr; - if (StatusEffectContainer->HasStatusEffect(EFFECT_TRICK_ATTACK) && + if (StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TrickAttack) && PSpell->getSpellGroup() == SPELLGROUP_BLUE && PSpell->dealsDamage()) { @@ -1472,7 +1472,7 @@ void CCharEntity::OnCastFinished(CMagicState& state, action_t& action) if (actionResult.param > 0 && PSpell->dealsDamage() && PSpell->getSpellGroup() == SPELLGROUP_BLUE && - (StatusEffectContainer->HasStatusEffect(EFFECT_CHAIN_AFFINITY) || StatusEffectContainer->HasStatusEffect(EFFECT_AZURE_LORE)) && + (StatusEffectContainer->HasStatusEffect(xi::StatusEffect::ChainAffinity) || StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AzureLore)) && static_cast(PSpell)->getPrimarySkillchain() != 0) { auto* PBlueSpell = static_cast(PSpell); @@ -1482,7 +1482,7 @@ void CCharEntity::OnCastFinished(CMagicState& state, action_t& action) actionResult.recordSkillchain(effect, battleutils::TakeSkillchainDamage(this, PTarget, actionResult.param, taChar)); } - if (StatusEffectContainer->HasStatusEffect({ EFFECT_SEKKANOKI, EFFECT_MEIKYO_SHISUI })) + if (StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Sekkanoki, xi::StatusEffect::MeikyoShisui })) { health.tp = (health.tp > 1000 ? health.tp - 1000 : 0); } @@ -1491,7 +1491,7 @@ void CCharEntity::OnCastFinished(CMagicState& state, action_t& action) health.tp = 0; } - StatusEffectContainer->DelStatusEffectSilent(EFFECT_CHAIN_AFFINITY); + StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::ChainAffinity); } // Immanence will create or extend a skillchain for elemental spells @@ -1499,7 +1499,7 @@ void CCharEntity::OnCastFinished(CMagicState& state, action_t& action) actionResult.param >= 0 && PSpell->dealsDamage() && PSpell->getSpellGroup() == SPELLGROUP_BLACK && - (StatusEffectContainer->HasStatusEffect(EFFECT_IMMANENCE))) + (StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Immanence))) { auto immanenceApplies = true; auto isHelix = false; @@ -1557,7 +1557,7 @@ void CCharEntity::OnCastFinished(CMagicState& state, action_t& action) if (immanenceApplies) { - StatusEffectContainer->DelStatusEffect(EFFECT_IMMANENCE); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Immanence); } if (effect != ActionProcSkillChain::None) @@ -1565,7 +1565,7 @@ void CCharEntity::OnCastFinished(CMagicState& state, action_t& action) actionResult.recordSkillchain(effect, battleutils::TakeSkillchainDamage(this, PTarget, actionResult.param, nullptr)); // Closing a skillchain with an immanence Helix will make the magic burst window longer - auto scEffect = PTarget->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0); + auto scEffect = PTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0); if (isHelix && scEffect) { scEffect->SetDuration(scEffect->GetDuration() + 2s); @@ -1769,7 +1769,7 @@ void CCharEntity::OnAbility(CAbilityState& state, action_t& action) pushPacket(this, this, 0, 0, MsgBasic::WaitLonger); return; } - if (this->StatusEffectContainer->HasStatusEffect(EFFECT_AMNESIA)) + if (this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Amnesia)) { pushPacket(this, this, 0, 0, MsgBasic::UnableToUseJobAbility2); return; @@ -1832,7 +1832,7 @@ void CCharEntity::OnAbility(CAbilityState& state, action_t& action) if (PAbility->getID() == ABILITY_LIGHT_ARTS || PAbility->getID() == ABILITY_DARK_ARTS || PAbility->getRecastId() == Recast::Strategems) { - if (this->StatusEffectContainer->HasStatusEffect(EFFECT_TABULA_RASA)) + if (this->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TabulaRasa)) { action.recast = 0s; baseChargeTime = 0s; @@ -1845,7 +1845,7 @@ void CCharEntity::OnAbility(CAbilityState& state, action_t& action) uint16 bloodPact_II_Reduction = std::min(getMod(Mod::BP_DELAY_II), 15); uint16 bloodPact_III_Reduction = 0; // std::min(getMod(Mod::BP_DELAY_III, 10); TODO: BP Delay III (SMN JP gift) not implemented - CStatusEffect* avatarsFavor = this->StatusEffectContainer->GetStatusEffect(EFFECT_AVATARS_FAVOR); + CStatusEffect* avatarsFavor = this->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AvatarsFavor); if (avatarsFavor) { favorReduction = std::min(avatarsFavor->GetPower(), 10); @@ -1887,15 +1887,15 @@ void CCharEntity::OnAbility(CAbilityState& state, action_t& action) // generic aggressive action else { - StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DETECTABLE); + StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Detectable); } - StatusEffectContainer->DelStatusEffect(EFFECT_ILLUSION); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Illusion); } else if (PAbility->getID() != ABILITY_TRICK_ATTACK) { // remove invisible only charutils::RemoveInvisible(this); - StatusEffectContainer->DelStatusEffect(EFFECT_ILLUSION); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Illusion); } } @@ -2141,7 +2141,7 @@ void CCharEntity::OnRaise() weaknessTime = 3min; } - CStatusEffect* PWeaknessEffect = new CStatusEffect(EFFECT_WEAKNESS, EFFECT_WEAKNESS, m_weaknessLvl, 0s, weaknessTime); + CStatusEffect* PWeaknessEffect = new CStatusEffect(xi::StatusEffect::Weakness, static_cast(xi::StatusEffect::Weakness), m_weaknessLvl, 0s, weaknessTime); StatusEffectContainer->AddStatusEffect(PWeaknessEffect); } @@ -2206,7 +2206,7 @@ void CCharEntity::OnRaise() // If Arise was used then apply a reraise 3 effect on the target if (m_hasArise) { - CStatusEffect* PReraiseEffect = new CStatusEffect(EFFECT_RERAISE, EFFECT_RERAISE, 3, 0s, 1h); + CStatusEffect* PReraiseEffect = new CStatusEffect(xi::StatusEffect::Reraise, static_cast(xi::StatusEffect::Reraise), 3, 0s, 1h); StatusEffectContainer->AddStatusEffect(PReraiseEffect); } @@ -2412,10 +2412,10 @@ void CCharEntity::Die(timer::duration _duration) this->ClearTrusts(); - if (StatusEffectContainer->HasStatusEffect(EFFECT_WEAKNESS)) + if (StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Weakness)) { // Remove weakness effect as per retail but keep track of weakness - StatusEffectContainer->DelStatusEffectSilent(EFFECT_WEAKNESS); + StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Weakness); // Increase the weakness counter if previously weakened m_weaknessLvl++; } @@ -2975,7 +2975,7 @@ void CCharEntity::tryStartNextEvent() updatemask |= UPDATE_POS; // TODO: decouple from this. We want the 250ms post-tick processing // Chocobo NPC (outside, gives you a mount) edge case - if (auto PStatusEffect = StatusEffectContainer->GetStatusEffect(EFFECT_MOUNTED)) + if (auto PStatusEffect = StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Mounted)) { switch (PStatusEffect->GetPower()) { @@ -3007,7 +3007,7 @@ void CCharEntity::tryStartNextEvent() m_Substate = CHAR_SUBSTATE::SUBSTATE_IN_CS; if (animation == ANIMATION_HEALING) { - StatusEffectContainer->DelStatusEffect(EFFECT_HEALING); + StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Healing); } if (PPet) diff --git a/src/map/entities/mobentity.cpp b/src/map/entities/mobentity.cpp index 26c219fcb46..81e2e7f2f8f 100644 --- a/src/map/entities/mobentity.cpp +++ b/src/map/entities/mobentity.cpp @@ -484,7 +484,7 @@ bool CMobEntity::shouldUseTPMove(uint16 tpThreshold) } // mobs use three mob skills in a row under Meikyo Shisui - if (StatusEffectContainer->HasStatusEffect(EFFECT_MEIKYO_SHISUI) && GetLocalVar("[MeikyoShisui]MobSkillCount") > 0) + if (StatusEffectContainer->HasStatusEffect(xi::StatusEffect::MeikyoShisui) && GetLocalVar("[MeikyoShisui]MobSkillCount") > 0) { return true; } @@ -780,7 +780,7 @@ void CMobEntity::DistributeRewards() }); // clang-format on - if (m_giveExp && !PChar->StatusEffectContainer->HasStatusEffect(EFFECT_BATTLEFIELD)) + if (m_giveExp && !PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Battlefield)) { charutils::DistributeExperiencePoints(PChar, this); charutils::DistributeCapacityPoints(PChar, this); @@ -1062,8 +1062,8 @@ void CMobEntity::DropItems(CCharEntity* PChar) // Begin Adding Crystals if (m_Element > 0) { - REGION_TYPE regionID = PChar->loc.zone->GetRegionID(); - EFFECT requiredEffect = EFFECT_NONE; + REGION_TYPE regionID = PChar->loc.zone->GetRegionID(); + xi::StatusEffect requiredEffect = xi::StatusEffect::None; switch (regionID) { @@ -1073,7 +1073,7 @@ void CMobEntity::DropItems(CCharEntity* PChar) case REGION_TYPE::HALVUNG: case REGION_TYPE::ARRAPAGO: case REGION_TYPE::ALZADAAL: - requiredEffect = EFFECT_SANCTION; + requiredEffect = xi::StatusEffect::Sanction; break; // Sigil Regions @@ -1085,25 +1085,25 @@ void CMobEntity::DropItems(CCharEntity* PChar) case REGION_TYPE::ARAGONEAU_FRONT: case REGION_TYPE::FAUREGANDI_FRONT: case REGION_TYPE::VALDEAUNIA_FRONT: - requiredEffect = EFFECT_SIGIL; + requiredEffect = xi::StatusEffect::Sigil; break; // Ionis Regions case REGION_TYPE::ADOULIN_ISLANDS: case REGION_TYPE::EAST_ULBUKA: - requiredEffect = EFFECT_IONIS; + requiredEffect = xi::StatusEffect::Ionis; break; // Signet Regions default: if (regionID < REGION_TYPE::TAVNAZIA && conquest::GetRegionOwner(regionID) <= 2) { - requiredEffect = EFFECT_SIGNET; + requiredEffect = xi::StatusEffect::Signet; } break; } - if (requiredEffect == EFFECT_NONE) + if (requiredEffect == xi::StatusEffect::None) { return; } @@ -1130,11 +1130,11 @@ void CMobEntity::DropItems(CCharEntity* PChar) // Sanction regions: 30% // Others leave at 20% - TODO: need more info on WOTG+ uint8 crystalRate = 20; - if (requiredEffect == EFFECT_SIGNET) + if (requiredEffect == xi::StatusEffect::Signet) { crystalRate = (playersNearby == 1) ? 55 : 45; } - else if (requiredEffect == EFFECT_SANCTION) + else if (requiredEffect == xi::StatusEffect::Sanction) { crystalRate = 30; } diff --git a/src/map/entities/trustentity.cpp b/src/map/entities/trustentity.cpp index a961c85e91f..26528aaa2d8 100644 --- a/src/map/entities/trustentity.cpp +++ b/src/map/entities/trustentity.cpp @@ -152,7 +152,7 @@ bool CTrustEntity::ValidTarget(CBattleEntity* PInitiator, uint16 targetFlags) if ((targetFlags & TARGET_PLAYER_PARTY_PIANISSIMO) && PInitiator->allegiance == allegiance && PMaster && PInitiator != this) { - if (PInitiator->StatusEffectContainer->HasStatusEffect(EFFECT_PIANISSIMO)) + if (PInitiator->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Pianissimo)) { return true; } diff --git a/src/map/ipc_client.cpp b/src/map/ipc_client.cpp index 52f2c9d5264..54af417fb8d 100644 --- a/src/map/ipc_client.cpp +++ b/src/map/ipc_client.cpp @@ -475,7 +475,7 @@ void IPCClient::handleMessage_PartyInvite(const IPP& ipp, const ipc::PartyInvite return; } - if (PInvitee->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC)) + if (PInvitee->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync)) { message::send(ipc::MessageStandard{ .recipientId = message.inviterId, diff --git a/src/map/latent_effect_container.cpp b/src/map/latent_effect_container.cpp index 1b855ed4e5d..0b23b5e8eb4 100644 --- a/src/map/latent_effect_container.cpp +++ b/src/map/latent_effect_container.cpp @@ -862,10 +862,10 @@ bool CLatentEffectContainer::ProcessLatentEffect(CLatentEffect& latentEffect, bo ((float)m_POwner->health.mp / m_POwner->health.maxmp) * 100 < latentEffect.GetConditionsValue(); break; case LATENT::STATUS_EFFECT_ACTIVE: - expression = m_POwner->StatusEffectContainer->HasStatusEffect((EFFECT)latentEffect.GetConditionsValue()); + expression = m_POwner->StatusEffectContainer->HasStatusEffect(static_cast(latentEffect.GetConditionsValue())); break; case LATENT::NO_FOOD_ACTIVE: - expression = !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_FOOD); + expression = !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Food); break; case LATENT::PARTY_MEMBERS: { @@ -973,19 +973,19 @@ bool CLatentEffectContainer::ProcessLatentEffect(CLatentEffect& latentEffect, bo case LATENT::SYNTH_TRAINEE: { expression = (uint16)m_POwner->RealSkills.skill[latentEffect.GetConditionsValue()] / 10 < 40 && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_FISHING_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_WOODWORKING_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_SMITHING_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_GOLDSMITHING_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_CLOTHCRAFT_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_LEATHERCRAFT_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_BONECRAFT_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_ALCHEMY_IMAGERY) && - !m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_COOKING_IMAGERY); + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::FishingImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::WoodworkingImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SmithingImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::GoldsmithingImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::ClothcraftImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LeathercraftImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::BonecraftImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AlchemyImagery) && + !m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::CookingImagery); break; } case LATENT::SONG_ROLL_ACTIVE: - expression = m_POwner->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_ROLL | EFFECTFLAG_SONG); + expression = m_POwner->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Roll | xi::StatusEffectFlag::Song); break; case LATENT::TIME_OF_DAY: { @@ -1208,8 +1208,8 @@ bool CLatentEffectContainer::ProcessLatentEffect(CLatentEffect& latentEffect, bo expression = m_POwner->isInGarrison() && m_POwner->GetMLevel() >= latentEffect.GetConditionsValue(); break; case LATENT::FOOD_ACTIVE: - expression = m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_FOOD) && - m_POwner->StatusEffectContainer->GetStatusEffect(EFFECT_FOOD)->GetSourceTypeParam() == latentEffect.GetConditionsValue(); + expression = m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Food) && + m_POwner->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Food)->GetSourceTypeParam() == latentEffect.GetConditionsValue(); break; case LATENT::JOB_LEVEL_BELOW: expression = m_POwner->GetMLevel() < latentEffect.GetConditionsValue(); @@ -1228,9 +1228,9 @@ bool CLatentEffectContainer::ProcessLatentEffect(CLatentEffect& latentEffect, bo // playerZoneId represents the player's destination if they're zoning. // Otherwise, it represents their current zone. auto region = zoneutils::GetCurrentRegion(playerZoneID); - auto hasSignet = m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_SIGNET); - auto hasSanction = m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_SANCTION); - auto hasSigil = m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_SIGIL); + auto hasSignet = m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Signet); + auto hasSanction = m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sanction); + auto hasSigil = m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sigil); auto regionAlwaysOutOfControl = zoneutils::IsAlwaysOutOfNationControl(region); switch (latentEffect.GetConditionsValue()) { diff --git a/src/map/lua/lua_ability.cpp b/src/map/lua/lua_ability.cpp index 357048efc5c..93e281ab960 100644 --- a/src/map/lua/lua_ability.cpp +++ b/src/map/lua/lua_ability.cpp @@ -121,7 +121,7 @@ void CLuaAbility::setRange(float range) m_PLuaAbility->setRange(range); } -void CLuaAbility::setPostActionCleanupEffect(EFFECT effectToCleanup) +void CLuaAbility::setPostActionCleanupEffect(xi::StatusEffect effectToCleanup) { m_PLuaAbility->setPostActionEffectCleanup(effectToCleanup); } diff --git a/src/map/lua/lua_ability.h b/src/map/lua/lua_ability.h index 52a9ca8aa2e..0b1f411b523 100644 --- a/src/map/lua/lua_ability.h +++ b/src/map/lua/lua_ability.h @@ -60,7 +60,7 @@ class CLuaAbility int32 getVE(); void setVE(int32 ve); void setRange(float range); - void setPostActionCleanupEffect(EFFECT effectToCleanup); + void setPostActionCleanupEffect(xi::StatusEffect effectToCleanup); bool operator==(const CLuaAbility& other) const { diff --git a/src/map/lua/lua_baseentity.cpp b/src/map/lua/lua_baseentity.cpp index 66f595b9711..16ec93d1b27 100644 --- a/src/map/lua/lua_baseentity.cpp +++ b/src/map/lua/lua_baseentity.cpp @@ -1144,7 +1144,7 @@ void CLuaBaseEntity::StartEventHelper(int32 EventID, sol::variadic_args va, EVEN ShowError("CLuaBaseEntity::StartEventHelper: Could not start event, Character Entity already triggered."); return; } - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_BOOST); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Boost); PChar->queueEvent(ParseEvent(EventID, va, PChar->eventPreparation, eventType)); } @@ -1890,14 +1890,14 @@ bool CLuaBaseEntity::canUseAbilities() { if (auto* PEntity = dynamic_cast(m_PBaseEntity)) { - return !(PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_SLEEP) || - PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_IMPAIRMENT) || - PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_SLEEP_II) || - PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_STUN) || - PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_AMNESIA) || - PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_LULLABY) || - PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_PETRIFICATION) || - PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_TERROR) || + return !(PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SleepI) || + PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Impairment) || + PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SleepIi) || + PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Stun) || + PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Amnesia) || + PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Lullaby) || + PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Petrification) || + PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Terror) || !(m_PBaseEntity->PAI->CanChangeState())); } @@ -10217,9 +10217,9 @@ int32 CLuaBaseEntity::addHP(int32 hpAdd) int32 result = PBattle->addHP(hpAdd); // will always remove sleep effect - PBattle->StatusEffectContainer->DelStatusEffect(EFFECT_SLEEP); - PBattle->StatusEffectContainer->DelStatusEffect(EFFECT_SLEEP_II); - PBattle->StatusEffectContainer->DelStatusEffect(EFFECT_LULLABY); + PBattle->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::SleepI); + PBattle->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::SleepIi); + PBattle->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Lullaby); return result; } @@ -10391,8 +10391,8 @@ void CLuaBaseEntity::takeDamage(int32 damage, const sol::object& attacker, const // Check to see if the target has a nightmare effect active, reset wakeUp accordingly // see mobskills/nightmare.lua for full explanation - if (PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_SLEEP) && - PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_SLEEP)->GetTier() >= 4) // Tier 4 = Player Avatar Nightmare + if (PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::SleepI) && + PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::SleepI)->GetTier() >= 4) // Tier 4 = Player Avatar Nightmare { // Don't break nightmare sleep from any dmg that doesn't break bind (DoT damage) if (breakBind == false) @@ -10403,14 +10403,14 @@ void CLuaBaseEntity::takeDamage(int32 damage, const sol::object& attacker, const // Diabolos NM/mob ability // "Damage will not wake you up from Nightmare, only Cure and Benediction (Benediction will also remove the Bio effect)." if (wakeUp == true && - PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_SLEEP)->GetTier() >= 11) // Tier 11 = Diabolos NM Nightmare + PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::SleepI)->GetTier() >= 11) // Tier 11 = Diabolos NM Nightmare { wakeUp = false; } } - if (PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_PETRIFICATION) && - PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_PETRIFICATION)->GetSubPower() == 1) + if (PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Petrification) && + PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Petrification)->GetSubPower() == 1) { removePetrify = true; } @@ -10430,7 +10430,7 @@ void CLuaBaseEntity::takeDamage(int32 damage, const sol::object& attacker, const if (removePetrify) { - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_PETRIFICATION); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Petrification); } } @@ -11743,7 +11743,7 @@ void CLuaBaseEntity::addPartyEffect(sol::variadic_args va) } CStatusEffect* PEffect = - new CStatusEffect(static_cast(args[0]), args[1], args[2], std::chrono::seconds(args[3]), std::chrono::seconds(args[4]), args[5], args[6]); + new CStatusEffect(static_cast(args[0]), args[1], args[2], std::chrono::seconds(args[3]), std::chrono::seconds(args[4]), args[5], args[6]); CBattleEntity* PEntity = ((CBattleEntity*)m_PBaseEntity); @@ -11779,7 +11779,7 @@ bool CLuaBaseEntity::hasPartyEffect(uint16 effectid) if (member->loc.zone == PChar->loc.zone) { // Bail out if someone DOESN'T have the desired effect - if (!member->StatusEffectContainer->HasStatusEffect(static_cast(effectid))) + if (!member->StatusEffectContainer->HasStatusEffect(static_cast(effectid))) { return false; } @@ -11810,7 +11810,7 @@ void CLuaBaseEntity::removePartyEffect(uint16 effectid) { if (member->loc.zone == PChar->loc.zone) { - member->StatusEffectContainer->DelStatusEffect(static_cast(effectid)); + member->StatusEffectContainer->DelStatusEffect(static_cast(effectid)); } } } @@ -12448,7 +12448,7 @@ void CLuaBaseEntity::setEnteredBattlefield(const bool entered) const } auto* PChar = static_cast(m_PBaseEntity); - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_BATTLEFIELD)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Battlefield)) { CBattlefield::setPlayerEntered(PChar, entered); } @@ -13101,9 +13101,9 @@ void CLuaBaseEntity::wakeUp() auto* PEntity = static_cast(m_PBaseEntity); - PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_SLEEP); - PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_SLEEP_II); - PEntity->StatusEffectContainer->DelStatusEffect(EFFECT_LULLABY); + PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::SleepI); + PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::SleepIi); + PEntity->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Lullaby); } /************************************************************************ @@ -13940,7 +13940,7 @@ void CLuaBaseEntity::clearEnmityForEntity(CLuaBaseEntity* PEntity) * }) * Notes : ************************************************************************/ -auto CLuaBaseEntity::addStatusEffect(const EFFECT effectId, sol::table params) const -> bool +auto CLuaBaseEntity::addStatusEffect(const xi::StatusEffect effectId, sol::table params) const -> bool { auto* PBattleEntity = dynamic_cast(m_PBaseEntity); if (!PBattleEntity) @@ -13975,7 +13975,7 @@ auto CLuaBaseEntity::addStatusEffect(const EFFECT effectId, sol::table params) c subPower, subIcon, tier, - flag); + static_cast(flag)); if (sourceType != EffectSourceType::SOURCE_NONE && sourceTypeParam > 0) { @@ -13984,7 +13984,7 @@ auto CLuaBaseEntity::addStatusEffect(const EFFECT effectId, sol::table params) c PEffect->SetOriginID(originEntity.getID()); - if (effectId == EFFECT_FOOD) + if (effectId == xi::StatusEffect::Food) { if (const auto durationModifier = PBattleEntity->getMod(Mod::FOOD_DURATION)) { @@ -14028,6 +14028,7 @@ auto CLuaBaseEntity::copyStatusEffect(const CLuaStatusEffect* PStatusEffect) con remainingDuration, POriginal->GetSubID(), POriginal->GetSubPower(), + POriginal->GetSubIcon(), POriginal->GetTier(), POriginal->GetEffectFlags(), POriginal->GetSourceType(), @@ -14044,7 +14045,7 @@ auto CLuaBaseEntity::copyStatusEffect(const CLuaStatusEffect* PStatusEffect) con * Notes : Can specify Power of the Effect as an option or the Source (will use power if both specified) ************************************************************************/ -auto CLuaBaseEntity::getStatusEffect(uint16 StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam) -> CStatusEffect* +auto CLuaBaseEntity::getStatusEffect(xi::StatusEffect StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam) -> CStatusEffect* { if (m_PBaseEntity->objtype == TYPE_NPC) { @@ -14065,7 +14066,7 @@ auto CLuaBaseEntity::getStatusEffect(uint16 StatusID, const sol::object& SubType } CStatusEffect* PStatusEffect = nullptr; - auto effect_StatusID = static_cast(StatusID); + auto effect_StatusID = StatusID; if (SubType != sol::lua_nil) { @@ -14093,7 +14094,7 @@ auto CLuaBaseEntity::getStatusEffect(uint16 StatusID, const sol::object& SubType * Notes : ************************************************************************/ -auto CLuaBaseEntity::getStatusEffectBySource(uint16 StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) -> CStatusEffect* +auto CLuaBaseEntity::getStatusEffectBySource(xi::StatusEffect StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) -> CStatusEffect* { if (m_PBaseEntity->objtype == TYPE_NPC) { @@ -14107,7 +14108,7 @@ auto CLuaBaseEntity::getStatusEffectBySource(uint16 StatusID, EffectSourceType S return nullptr; } - return PBattleEntity->StatusEffectContainer->GetStatusEffectBySource(static_cast(StatusID), SourceType, SourceTypeParam); + return PBattleEntity->StatusEffectContainer->GetStatusEffectBySource(StatusID, SourceType, SourceTypeParam); } /************************************************************************ @@ -14168,7 +14169,7 @@ int16 CLuaBaseEntity::getStatusEffectElement(uint16 statusId) * Notes : ************************************************************************/ -bool CLuaBaseEntity::canGainStatusEffect(uint16 effect, const sol::object& powerObj) +auto CLuaBaseEntity::canGainStatusEffect(xi::StatusEffect effect, const sol::object& powerObj) -> bool { if (m_PBaseEntity->objtype == TYPE_NPC) { @@ -14184,7 +14185,7 @@ bool CLuaBaseEntity::canGainStatusEffect(uint16 effect, const sol::object& power return false; } - CStatusEffect statusEffect(static_cast(effect), 0, power, 0s, 0s); + CStatusEffect statusEffect(effect, 0, power, 0s, 0s); return PBattleEntity->StatusEffectContainer->CanGainStatusEffect(&statusEffect); } @@ -14196,7 +14197,7 @@ bool CLuaBaseEntity::canGainStatusEffect(uint16 effect, const sol::object& power * Notes : More specific in scope than hasStatusEffectByFlag() ************************************************************************/ -bool CLuaBaseEntity::hasStatusEffect(uint16 StatusID, const sol::object& SubType) +auto CLuaBaseEntity::hasStatusEffect(xi::StatusEffect StatusID, const sol::object& SubType) -> bool { if (m_PBaseEntity->objtype == TYPE_NPC) { @@ -14210,17 +14211,16 @@ bool CLuaBaseEntity::hasStatusEffect(uint16 StatusID, const sol::object& SubType return false; } - bool hasEffect = false; - auto effect_StatusID = static_cast(StatusID); + bool hasEffect = false; if (SubType != sol::lua_nil) { auto uint16_SubType = SubType.as(); - hasEffect = PBattleEntity->StatusEffectContainer->HasStatusEffect(effect_StatusID, uint16_SubType); + hasEffect = PBattleEntity->StatusEffectContainer->HasStatusEffect(StatusID, uint16_SubType); } else { - hasEffect = PBattleEntity->StatusEffectContainer->HasStatusEffect(effect_StatusID); + hasEffect = PBattleEntity->StatusEffectContainer->HasStatusEffect(StatusID); } return hasEffect; @@ -14247,8 +14247,7 @@ bool CLuaBaseEntity::hasStatusEffectByFlag(uint16 StatusID) return 0; } - auto effect_StatusID = static_cast(StatusID); - return PBattleEntity->StatusEffectContainer->HasStatusEffectByFlag(effect_StatusID); + return PBattleEntity->StatusEffectContainer->HasStatusEffectByFlag(static_cast(StatusID)); } /************************************************************************ @@ -14258,7 +14257,7 @@ bool CLuaBaseEntity::hasStatusEffectByFlag(uint16 StatusID) * Notes : ************************************************************************/ -uint8 CLuaBaseEntity::countEffect(uint16 StatusID) +auto CLuaBaseEntity::countEffect(xi::StatusEffect StatusID) -> uint8 { if (m_PBaseEntity->objtype == TYPE_NPC) { @@ -14272,12 +14271,12 @@ uint8 CLuaBaseEntity::countEffect(uint16 StatusID) return 0; } - auto effect_StatusID = static_cast(StatusID); + auto effect_StatusID = StatusID; return PBattleEntity->StatusEffectContainer->GetEffectsCount(effect_StatusID); } /************************************************************************ - * Function: countEffectWithFlag(EFFECTFLAG) + * Function: countEffectWithFlag(xi::StatusEffectFlag) * Purpose : Returns the number of Effects an Entity has in their container that matches the provided flag * Example : if target:countEffectWithFlag(xi.effectFlag.DISPELABLE) > 3 then * Notes : @@ -14297,7 +14296,7 @@ uint8 CLuaBaseEntity::countEffectWithFlag(uint32 flag) return 0; } - auto effectFlag = static_cast(flag); + auto effectFlag = static_cast(flag); return PBattleEntity->StatusEffectContainer->GetEffectsCountWithFlag(effectFlag); } @@ -14308,7 +14307,7 @@ uint8 CLuaBaseEntity::countEffectWithFlag(uint32 flag) * Notes : Can specify Power of the Effect as an option or the Source (will use power if both specified) ************************************************************************/ -bool CLuaBaseEntity::delStatusEffect(uint16 StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam) +auto CLuaBaseEntity::delStatusEffect(xi::StatusEffect StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam) -> bool { if (m_PBaseEntity->objtype == TYPE_NPC) { @@ -14329,7 +14328,7 @@ bool CLuaBaseEntity::delStatusEffect(uint16 StatusID, const sol::object& SubType bool result = false; - auto effect_StatusID = static_cast(StatusID); + auto effect_StatusID = StatusID; if (SubType != sol::lua_nil) { @@ -14373,7 +14372,7 @@ void CLuaBaseEntity::delStatusEffectsByFlag(uint32 flag, const sol::object& sile auto removalNotice = (silent.is() && silent.as()) ? EffectNotice::Silent : EffectNotice::ShowMessage; - PBattleEntity->StatusEffectContainer->DelStatusEffectsByFlag(static_cast(flag), removalNotice); + PBattleEntity->StatusEffectContainer->DelStatusEffectsByFlag(static_cast(flag), removalNotice); } /************************************************************************ @@ -14407,7 +14406,7 @@ void CLuaBaseEntity::delStatusEffectsByType(uint16 type) * Notes : Used specifically for Status Effects that are not supposed to show a message once worn ************************************************************************/ -bool CLuaBaseEntity::delStatusEffectSilent(uint16 StatusID) +auto CLuaBaseEntity::delStatusEffectSilent(xi::StatusEffect StatusID) -> bool { if (m_PBaseEntity->objtype == TYPE_NPC) { @@ -14421,7 +14420,7 @@ bool CLuaBaseEntity::delStatusEffectSilent(uint16 StatusID) return false; } - auto effect_StatusID = static_cast(StatusID); + auto effect_StatusID = StatusID; return PBattleEntity->StatusEffectContainer->DelStatusEffectSilent(effect_StatusID); } @@ -14495,9 +14494,9 @@ int32 CLuaBaseEntity::dispelStatusEffect(const sol::object& flagObj) return 0; } - uint32 flag = flagObj.is() ? flagObj.as() : (uint32)EFFECTFLAG_DISPELABLE; + uint32 flag = flagObj.is() ? flagObj.as() : (uint32)xi::StatusEffectFlag::Dispelable; - return PBattleEntity->StatusEffectContainer->DispelStatusEffect(static_cast(flag)); + return static_cast(PBattleEntity->StatusEffectContainer->DispelStatusEffect(static_cast(flag))); } /************************************************************************ @@ -14521,9 +14520,9 @@ uint8 CLuaBaseEntity::dispelAllStatusEffect(const sol::object& flagObj) return 0; } - uint32 flag = flagObj.is() ? flagObj.as() : (uint32)EFFECTFLAG_DISPELABLE; + uint32 flag = flagObj.is() ? flagObj.as() : (uint32)xi::StatusEffectFlag::Dispelable; - return PBattleEntity->StatusEffectContainer->DispelAllStatusEffect(static_cast(flag)); + return PBattleEntity->StatusEffectContainer->DispelAllStatusEffect(static_cast(flag)); } /************************************************************************ @@ -14553,13 +14552,13 @@ uint16 CLuaBaseEntity::stealStatusEffect(CLuaBaseEntity* PTargetEntity, const so return 0; } - uint32 flag = flagObj.is() ? flagObj.as() : (uint32)EFFECTFLAG_DISPELABLE; + uint32 flag = flagObj.is() ? flagObj.as() : (uint32)xi::StatusEffectFlag::Dispelable; auto removalNotice = (silentObj.is() && silentObj.as()) ? EffectNotice::Silent : EffectNotice::ShowMessage; - if (CStatusEffect* PStatusEffect = PTargetBattleEntity->StatusEffectContainer->StealStatusEffect(static_cast(flag), removalNotice)) + if (CStatusEffect* PStatusEffect = PTargetBattleEntity->StatusEffectContainer->StealStatusEffect(static_cast(flag), removalNotice)) { PBattleEntity->StatusEffectContainer->AddStatusEffect(PStatusEffect); - return PStatusEffect->GetStatusID(); + return static_cast(PStatusEffect->GetStatusID()); } else { @@ -14902,15 +14901,15 @@ auto CLuaBaseEntity::addCorsairRoll(sol::variadic_args va) -> bool auto sourceTypeParam = va[10].is() ? va[10].as() : 0; auto originID = va[11].is() ? va[11].as() : 0; - CStatusEffect* PEffect = new CStatusEffect(static_cast(effectID), // Effect ID - effectID, // Effect Icon (Associated with ID) - power, // Power (Mod power) - std::chrono::seconds(tick), // Tick - std::chrono::seconds(duration), // Duration - subType, // SubType (Mod ID) - subPower, // SubPower (Roll #) - 0, // SubIcon (rolls have no sub-icon) - tier // Tier + CStatusEffect* PEffect = new CStatusEffect(static_cast(effectID), // Effect ID + effectID, // Effect Icon (Associated with ID) + power, // Power (Mod power) + std::chrono::seconds(tick), // Tick + std::chrono::seconds(duration), // Duration + subType, // SubType (Mod ID) + subPower, // SubPower (Roll #) + 0, // SubIcon (rolls have no sub-icon) + tier // Tier ); PEffect->SetSource(sourceType, sourceTypeParam); @@ -14959,7 +14958,7 @@ bool CLuaBaseEntity::hasBustEffect(uint16 id) } auto* PBattleEntity = static_cast(m_PBaseEntity); - return PBattleEntity->StatusEffectContainer->HasBustEffect(static_cast(id)); + return PBattleEntity->StatusEffectContainer->HasBustEffect(static_cast(id)); } /************************************************************************ @@ -14978,7 +14977,7 @@ uint8 CLuaBaseEntity::numBustEffects() } auto* PBattleEntity = static_cast(m_PBaseEntity); - return PBattleEntity->StatusEffectContainer->GetEffectsCount(EFFECT_BUST); + return PBattleEntity->StatusEffectContainer->GetEffectsCount(xi::StatusEffect::Bust); } /************************************************************************ @@ -15007,7 +15006,7 @@ uint16 CLuaBaseEntity::healingWaltz() * Notes : ************************************************************************/ -bool CLuaBaseEntity::addBardSong(CLuaBaseEntity* PEntity, uint16 effectID, uint16 power, uint16 tick, uint16 duration, uint16 subType, uint16 subPower, uint16 tier) +auto CLuaBaseEntity::addBardSong(CLuaBaseEntity* PEntity, xi::StatusEffect effectID, uint16 power, uint16 tick, uint16 duration, uint16 subType, uint16 subPower, uint16 tier) -> bool { auto* PBattle = dynamic_cast(m_PBaseEntity); if (!PBattle) @@ -15016,8 +15015,8 @@ bool CLuaBaseEntity::addBardSong(CLuaBaseEntity* PEntity, uint16 effectID, uint1 return false; } - CStatusEffect* PEffect = new CStatusEffect(static_cast(effectID), // Effect ID - effectID, // Effect Icon (Associated with ID) + CStatusEffect* PEffect = new CStatusEffect(effectID, // Effect ID + static_cast(effectID), // Effect Icon (Associated with ID) power, // Power std::chrono::seconds(tick), // Tick std::chrono::seconds(duration), // Duration @@ -17251,8 +17250,8 @@ auto CLuaBaseEntity::getAllRuneEffects() -> sol::table return sol::lua_nil; } - std::vector runeEffectList = PEntity->StatusEffectContainer->GetAllRuneEffects(); - auto table = lua.create_table(); + std::vector runeEffectList = PEntity->StatusEffectContainer->GetAllRuneEffects(); + auto table = lua.create_table(); for (const auto& runeEffect : runeEffectList) { table.add(runeEffect); @@ -17296,7 +17295,7 @@ uint16 CLuaBaseEntity::getHighestRuneEffect() return 0; } - return PEntity->StatusEffectContainer->GetHighestRuneEffect(); + return static_cast(PEntity->StatusEffectContainer->GetHighestRuneEffect()); } /************************************************************************ @@ -17315,7 +17314,7 @@ uint16 CLuaBaseEntity::getNewestRuneEffect() return 0; } - return PEntity->StatusEffectContainer->GetNewestRuneEffect(); + return static_cast(PEntity->StatusEffectContainer->GetNewestRuneEffect()); } /************************************************************************ diff --git a/src/map/lua/lua_baseentity.h b/src/map/lua/lua_baseentity.h index bb35855bdd5..7475f165b92 100644 --- a/src/map/lua/lua_baseentity.h +++ b/src/map/lua/lua_baseentity.h @@ -691,22 +691,22 @@ class CLuaBaseEntity void clearEnmityForEntity(CLuaBaseEntity* PEntity); // Status Effects - auto addStatusEffect(EFFECT effectId, sol::table params) const -> bool; + auto addStatusEffect(xi::StatusEffect effectId, sol::table params) const -> bool; auto copyStatusEffect(const CLuaStatusEffect* PStatusEffect) const -> bool; - auto getStatusEffect(uint16 StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam) -> CStatusEffect*; - auto getStatusEffectBySource(uint16 StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) -> CStatusEffect*; + auto getStatusEffect(xi::StatusEffect StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam) -> CStatusEffect*; + auto getStatusEffectBySource(xi::StatusEffect StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) -> CStatusEffect*; auto getStatusEffects() -> sol::table; int16 getStatusEffectElement(uint16 statusId); - bool canGainStatusEffect(uint16 effect, const sol::object& powerObj); - bool hasStatusEffect(uint16 StatusID, const sol::object& SubType); + auto canGainStatusEffect(xi::StatusEffect effect, const sol::object& powerObj) -> bool; + auto hasStatusEffect(xi::StatusEffect StatusID, const sol::object& SubType) -> bool; bool hasStatusEffectByFlag(uint16 StatusID); - uint8 countEffect(uint16 StatusID); // Gets the number of effects of a specific type on the entity - uint8 countEffectWithFlag(uint32 flag); // Gets the number of effects with a flag on the entity + auto countEffect(xi::StatusEffect StatusID) -> uint8; // Gets the number of effects of a specific type on the entity + uint8 countEffectWithFlag(uint32 flag); // Gets the number of effects with a flag on the entity - bool delStatusEffect(uint16 StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam); + auto delStatusEffect(xi::StatusEffect StatusID, const sol::object& SubType, const sol::object& SourceType, const sol::object& SourceTypeParam) -> bool; void delStatusEffectsByFlag(uint32 flag, const sol::object& silent); void delStatusEffectsByType(uint16 type); - bool delStatusEffectSilent(uint16 StatusID); // Removes Status Effect, suppresses message + auto delStatusEffectSilent(xi::StatusEffect StatusID) -> bool; // Removes Status Effect, suppresses message uint16 eraseStatusEffect(); uint8 eraseAllStatusEffect(); int32 dispelStatusEffect(const sol::object& flagObj); @@ -733,7 +733,7 @@ class CLuaBaseEntity bool hasBustEffect(uint16 id); // Checks to see if a character has a specified busted corsair roll uint8 numBustEffects(); // Gets the number of bust effects on the player uint16 healingWaltz(); - bool addBardSong(CLuaBaseEntity* PEntity, uint16 effectID, uint16 power, uint16 tick, uint16 duration, uint16 SubType, uint16 subPower, uint16 tier); + auto addBardSong(CLuaBaseEntity* PEntity, xi::StatusEffect effectID, uint16 power, uint16 tick, uint16 duration, uint16 SubType, uint16 subPower, uint16 tier) -> bool; void charm(const CLuaBaseEntity* target, const sol::object& p0); void uncharm(); diff --git a/src/map/lua/lua_statuseffect.cpp b/src/map/lua/lua_statuseffect.cpp index 477a54b8188..c3a34b62239 100644 --- a/src/map/lua/lua_statuseffect.cpp +++ b/src/map/lua/lua_statuseffect.cpp @@ -40,7 +40,7 @@ CLuaStatusEffect::CLuaStatusEffect(CStatusEffect* StatusEffect) uint32 CLuaStatusEffect::getEffectType() { - return m_PLuaStatusEffect->GetStatusID(); + return static_cast(m_PLuaStatusEffect->GetStatusID()); } //======================================================// @@ -222,27 +222,27 @@ void CLuaStatusEffect::addMod(uint16 mod, int16 amount) uint32 CLuaStatusEffect::getEffectFlags() { - return m_PLuaStatusEffect->GetEffectFlags(); + return static_cast(m_PLuaStatusEffect->GetEffectFlags()); } void CLuaStatusEffect::setEffectFlags(uint32 flags) { - m_PLuaStatusEffect->SetEffectFlags(flags); + m_PLuaStatusEffect->SetEffectFlags(static_cast(flags)); } void CLuaStatusEffect::addEffectFlag(uint32 flag) { - m_PLuaStatusEffect->AddEffectFlag(flag); + m_PLuaStatusEffect->AddEffectFlag(static_cast(flag)); } void CLuaStatusEffect::delEffectFlag(uint32 flag) { - m_PLuaStatusEffect->DelEffectFlag(flag); + m_PLuaStatusEffect->DelEffectFlag(static_cast(flag)); } bool CLuaStatusEffect::hasEffectFlag(uint32 flag) { - return m_PLuaStatusEffect->HasEffectFlag(flag); + return m_PLuaStatusEffect->HasEffectFlag(static_cast(flag)); } uint16 CLuaStatusEffect::getIcon() @@ -312,7 +312,7 @@ void CLuaStatusEffect::Register() std::ostream& operator<<(std::ostream& os, const CLuaStatusEffect& effect) { - std::string id = effect.GetStatusEffect() ? std::to_string(effect.GetStatusEffect()->GetStatusID()) : "nullptr"; + std::string id = effect.GetStatusEffect() ? std::to_string(static_cast(effect.GetStatusEffect()->GetStatusID())) : "nullptr"; return os << "CLuaStatusEffect(" << id << ")"; } diff --git a/src/map/lua/luautils.cpp b/src/map/lua/luautils.cpp index f2f3924903e..a094c55517b 100644 --- a/src/map/lua/luautils.cpp +++ b/src/map/lua/luautils.cpp @@ -5144,7 +5144,7 @@ void OnBattlefieldKick(CCharEntity* PChar) { TracyZoneScoped; - CStatusEffect* status = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_BATTLEFIELD); + CStatusEffect* status = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Battlefield); if (status != nullptr) { diff --git a/src/map/mob_spell_container.cpp b/src/map/mob_spell_container.cpp index 0e78af1f24f..3061fcec17a 100644 --- a/src/map/mob_spell_container.cpp +++ b/src/map/mob_spell_container.cpp @@ -135,7 +135,7 @@ Maybe CMobSpellContainer::GetAvailable(SpellID spellId) spell->getSkillType() == SKILL_WIND_INSTRUMENT || spell->getSkillType() == SKILL_STRING_INSTRUMENT || spell->getSkillType() == SKILL_GEOMANCY || - m_PMob->StatusEffectContainer->HasStatusEffect(EFFECT_MANAFONT); + m_PMob->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Manafont); bool isNotInRecast = !m_PMob->PRecastContainer->Has(RECAST_MAGIC, static_cast(spellId)); @@ -893,31 +893,31 @@ Maybe CMobSpellContainer::GetNaSpell() } // paralyna - if (HasNaSpell(SpellID::Paralyna) && m_PMob->StatusEffectContainer->HasStatusEffect(EFFECT_PARALYSIS)) + if (HasNaSpell(SpellID::Paralyna) && m_PMob->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Paralysis)) { return SpellID::Paralyna; } // cursna - if (HasNaSpell(SpellID::Cursna) && m_PMob->StatusEffectContainer->HasStatusEffect({ EFFECT_CURSE, EFFECT_CURSE_II })) + if (HasNaSpell(SpellID::Cursna) && m_PMob->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::CurseI, xi::StatusEffect::CurseIi })) { return SpellID::Cursna; } // erase - if (HasNaSpell(SpellID::Erase) && m_PMob->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_ERASABLE)) + if (HasNaSpell(SpellID::Erase) && m_PMob->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Erasable)) { return SpellID::Erase; } // blindna - if (HasNaSpell(SpellID::Blindna) && m_PMob->StatusEffectContainer->HasStatusEffect(EFFECT_BLINDNESS)) + if (HasNaSpell(SpellID::Blindna) && m_PMob->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Blindness)) { return SpellID::Blindna; } // poisona - if (HasNaSpell(SpellID::Poisona) && m_PMob->StatusEffectContainer->HasStatusEffect(EFFECT_POISON)) + if (HasNaSpell(SpellID::Poisona) && m_PMob->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Poison)) { return SpellID::Poisona; } diff --git a/src/map/monstrosity.cpp b/src/map/monstrosity.cpp index a881441b45f..f84319fae09 100644 --- a/src/map/monstrosity.cpp +++ b/src/map/monstrosity.cpp @@ -332,20 +332,20 @@ void monstrosity::HandleZoneIn(CCharEntity* PChar) { auto duration = PChar->m_PMonstrosity->Belligerency ? 1min : 18h; - CStatusEffect* PEffect = new CStatusEffect(EFFECT::EFFECT_GESTATION, EFFECT::EFFECT_GESTATION, 0, 0s, duration); + CStatusEffect* PEffect = new CStatusEffect(xi::StatusEffect::Gestation, static_cast(xi::StatusEffect::Gestation), 0, 0s, duration); // TODO: Move these into the db - PEffect->AddEffectFlag(EFFECTFLAG_INVISIBLE); - PEffect->AddEffectFlag(EFFECTFLAG_DEATH); - PEffect->AddEffectFlag(EFFECTFLAG_ATTACK); - PEffect->AddEffectFlag(EFFECTFLAG_MAGIC_BEGIN); - PEffect->AddEffectFlag(EFFECTFLAG_DETECTABLE); - PEffect->AddEffectFlag(EFFECTFLAG_ON_ZONE); + PEffect->AddEffectFlag(xi::StatusEffectFlag::Invisible); + PEffect->AddEffectFlag(xi::StatusEffectFlag::Death); + PEffect->AddEffectFlag(xi::StatusEffectFlag::Attack); + PEffect->AddEffectFlag(xi::StatusEffectFlag::MagicBegin); + PEffect->AddEffectFlag(xi::StatusEffectFlag::Detectable); + PEffect->AddEffectFlag(xi::StatusEffectFlag::OnZone); - // PEffect->AddEffectFlag(EFFECTFLAG_LOGOUT); + // PEffect->AddEffectFlag(xi::StatusEffectFlag::Logout); // NOTE: It DOES say the effect wears off - // PEffect->AddEffectFlag(EFFECTFLAG_NO_LOSS_MESSAGE); + // PEffect->AddEffectFlag(xi::StatusEffectFlag::NoLossMessage); PChar->StatusEffectContainer->AddStatusEffect(PEffect, EffectNotice::Silent); } diff --git a/src/map/packets/c2s/0x01a_action.cpp b/src/map/packets/c2s/0x01a_action.cpp index 41764be7327..620b18dce00 100644 --- a/src/map/packets/c2s/0x01a_action.cpp +++ b/src/map/packets/c2s/0x01a_action.cpp @@ -172,13 +172,13 @@ void GP_CLI_COMMAND_ACTION::process(MapSession* PSession, CCharEntity* PChar) co { // Monstrosity: Can't really do anything while under Gestation until you click it off. // : MONs can trigger doors, so we'll handle that later. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_GESTATION)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Gestation)) { return; } // Talking to an NPC cancels /heal - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_HEALING); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Healing); // Talking to an NPC force disengages if (PChar->PAI->IsEngaged()) @@ -266,7 +266,7 @@ void GP_CLI_COMMAND_ACTION::process(MapSession* PSession, CCharEntity* PChar) co { if (PChar->isMounted()) { - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_MOUNTED); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Mounted); } PChar->PAI->Engage(this->ActIndex); @@ -456,7 +456,7 @@ void GP_CLI_COMMAND_ACTION::process(MapSession* PSession, CCharEntity* PChar) co { PChar->animation = ANIMATION_NONE; PChar->updatemask |= UPDATE_HP; - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_MOUNTED); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Mounted); } break; case GP_CLI_COMMAND_ACTION_ACTIONID::TractorMenu: @@ -496,7 +496,7 @@ void GP_CLI_COMMAND_ACTION::process(MapSession* PSession, CCharEntity* PChar) co break; case GP_CLI_COMMAND_ACTION_ACTIONID::Blockaid: { - if (!PChar->StatusEffectContainer->HasStatusEffect(EFFECT_ALLIED_TAGS)) + if (!PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AlliedTags)) { if (this->BlockAid.StatusId == GP_CLI_COMMAND_ACTION_BLOCKAID::Disable && PChar->getBlockingAid()) { @@ -560,8 +560,8 @@ void GP_CLI_COMMAND_ACTION::process(MapSession* PSession, CCharEntity* PChar) co PChar->m_mountId = this->Mount.MountId ? this->Mount.MountId + 1 : 0; PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect( - EFFECT_MOUNTED, - EFFECT_MOUNTED, + xi::StatusEffect::Mounted, + static_cast(xi::StatusEffect::Mounted), this->Mount.MountId ? this->Mount.MountId + 1 : 0, 0s, 30min, diff --git a/src/map/packets/c2s/0x036_item_transfer.cpp b/src/map/packets/c2s/0x036_item_transfer.cpp index 3af79a44e2f..638572cffb3 100644 --- a/src/map/packets/c2s/0x036_item_transfer.cpp +++ b/src/map/packets/c2s/0x036_item_transfer.cpp @@ -66,7 +66,7 @@ auto GP_CLI_COMMAND_ITEM_TRANSFER::validate(MapSession* PSession, const CCharEnt void GP_CLI_COMMAND_ITEM_TRANSFER::process(MapSession* PSession, CCharEntity* PChar) const { // If PChar is invisible don't allow the trade - if (PChar->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_INVISIBLE)) + if (PChar->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Invisible)) { PChar->pushPacket(0, 0, MsgStd::CannotWhileInvisible); return; diff --git a/src/map/packets/c2s/0x06e_group_solicit_req.cpp b/src/map/packets/c2s/0x06e_group_solicit_req.cpp index 9e66e2438c0..1d0225aa9ac 100644 --- a/src/map/packets/c2s/0x06e_group_solicit_req.cpp +++ b/src/map/packets/c2s/0x06e_group_solicit_req.cpp @@ -110,7 +110,7 @@ void GP_CLI_COMMAND_GROUP_SOLICIT_REQ::process(MapSession* PSession, CCharEntity break; } - if (PInvitee->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC)) + if (PInvitee->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync)) { ShowDebug("%s has level sync, unable to send invite", PInvitee->getName()); PInviter->pushPacket(PInviter, 0, 0, MsgStd::CannotInviteLevelSync); @@ -196,7 +196,7 @@ void GP_CLI_COMMAND_GROUP_SOLICIT_REQ::process(MapSession* PSession, CCharEntity break; } - if (PInvitee->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC)) + if (PInvitee->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync)) { ShowDebug("%s has level sync, unable to send invite", PInvitee->getName()); PInviter->pushPacket(PInviter, 0, 0, MsgStd::CannotInviteLevelSync); diff --git a/src/map/packets/c2s/0x074_group_solicit_res.cpp b/src/map/packets/c2s/0x074_group_solicit_res.cpp index 6c6f80ce17d..28006f8b7c6 100644 --- a/src/map/packets/c2s/0x074_group_solicit_res.cpp +++ b/src/map/packets/c2s/0x074_group_solicit_res.cpp @@ -96,7 +96,7 @@ void GP_CLI_COMMAND_GROUP_SOLICIT_RES::process(MapSession* PSession, CCharEntity // the rest is for a standard party invitation if (PChar->PParty == nullptr) { - if (!(PChar->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC) && PChar->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_RESTRICTION))) + if (!(PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync) && PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelRestriction))) { ShowDebug("%s is not under lvl sync or restriction", PChar->getName()); if (PInviter->PParty == nullptr) diff --git a/src/map/packets/c2s/0x0e7_reqlogout.cpp b/src/map/packets/c2s/0x0e7_reqlogout.cpp index 3a083143557..a29bb6688f6 100644 --- a/src/map/packets/c2s/0x0e7_reqlogout.cpp +++ b/src/map/packets/c2s/0x0e7_reqlogout.cpp @@ -35,7 +35,7 @@ auto GP_CLI_COMMAND_REQLOGOUT::validate(MapSession* PSession, const CCharEntity* void GP_CLI_COMMAND_REQLOGOUT::process(MapSession* PSession, CCharEntity* PChar) const { - auto* existingEffect = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEAVEGAME); + auto* existingEffect = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Leavegame); auto applyLeaveGame = [&](GP_CLI_COMMAND_REQLOGOUT_KIND kind) { @@ -47,7 +47,7 @@ void GP_CLI_COMMAND_REQLOGOUT::process(MapSession* PSession, CCharEntity* PChar) else { // Apply new LeaveGame and store the kind as the power. - const auto leaveEffect = new CStatusEffect(EFFECT_LEAVEGAME, 0, static_cast(kind), 5s, 0s); + const auto leaveEffect = new CStatusEffect(xi::StatusEffect::Leavegame, 0, static_cast(kind), 5s, 0s); PChar->StatusEffectContainer->AddStatusEffect(leaveEffect); } }; @@ -56,7 +56,7 @@ void GP_CLI_COMMAND_REQLOGOUT::process(MapSession* PSession, CCharEntity* PChar) { if (existingEffect) { - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEAVEGAME); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Leavegame); } }; diff --git a/src/map/packets/c2s/0x0e8_camp.cpp b/src/map/packets/c2s/0x0e8_camp.cpp index 636367d24c8..bbc7d7994a3 100644 --- a/src/map/packets/c2s/0x0e8_camp.cpp +++ b/src/map/packets/c2s/0x0e8_camp.cpp @@ -53,12 +53,12 @@ void GP_CLI_COMMAND_CAMP::process(MapSession* PSession, CCharEntity* PChar) cons PChar->PPet->PAI->Disengage(); } - PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_HEALING, 0, 0, std::chrono::seconds(settings::get("map.HEALING_TICK_DELAY")), 0s)); + PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Healing, 0, 0, std::chrono::seconds(settings::get("map.HEALING_TICK_DELAY")), 0s)); }; auto disableHealing = [&]() { - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_HEALING); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Healing); }; // Note: The status effect lua takes care of changing the animation. diff --git a/src/map/packets/c2s/0x0ea_sit.cpp b/src/map/packets/c2s/0x0ea_sit.cpp index 77dc5027a4a..7f52164e35f 100644 --- a/src/map/packets/c2s/0x0ea_sit.cpp +++ b/src/map/packets/c2s/0x0ea_sit.cpp @@ -35,7 +35,7 @@ auto GP_CLI_COMMAND_SIT::validate(MapSession* PSession, const CCharEntity* PChar void GP_CLI_COMMAND_SIT::process(MapSession* PSession, CCharEntity* PChar) const { // Retail accurate: Can inject /sit while healing/logging out, but it cancels the effect. - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_HEALING); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Healing); switch (static_cast(this->Mode)) { diff --git a/src/map/packets/c2s/0x100_myroom_job.cpp b/src/map/packets/c2s/0x100_myroom_job.cpp index b60fb5a0a42..d39be746e04 100644 --- a/src/map/packets/c2s/0x100_myroom_job.cpp +++ b/src/map/packets/c2s/0x100_myroom_job.cpp @@ -143,12 +143,12 @@ void GP_CLI_COMMAND_MYROOM_JOB::process(MapSession* PSession, CCharEntity* PChar // If the player has a teleport effect and they change jobs, cancel the teleport/warps you // Retail does cancel your teleport/warp if you change subs if someone else ports/warps - if (auto PTeleportEffect = PChar->StatusEffectContainer->GetStatusEffect(EFFECT::EFFECT_TELEPORT)) + if (auto PTeleportEffect = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Teleport)) { PTeleportEffect->SetPower(0); } - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DISPELABLE | EFFECTFLAG_ROLL | EFFECTFLAG_ON_JOBCHANGE); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Dispelable | xi::StatusEffectFlag::Roll | xi::StatusEffectFlag::OnJobchange); // clang-format off PChar->ForParty([](CBattleEntity* PMember) diff --git a/src/map/packets/c2s/0x113_sitchair.cpp b/src/map/packets/c2s/0x113_sitchair.cpp index b8572c24f5d..3843b461e90 100644 --- a/src/map/packets/c2s/0x113_sitchair.cpp +++ b/src/map/packets/c2s/0x113_sitchair.cpp @@ -37,7 +37,7 @@ auto GP_CLI_COMMAND_SITCHAIR::validate(MapSession* PSession, const CCharEntity* void GP_CLI_COMMAND_SITCHAIR::process(MapSession* PSession, CCharEntity* PChar) const { // Retail accurate: Can inject /sitchair while healing/logging out, but it cancels the effect. - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_HEALING); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Healing); if (this->Mode == static_cast(GP_CLI_COMMAND_SITCHAIR_MODE::Off)) { diff --git a/src/map/packets/c2s/validation.cpp b/src/map/packets/c2s/validation.cpp index a6653618e06..edc7c74b04c 100644 --- a/src/map/packets/c2s/validation.cpp +++ b/src/map/packets/c2s/validation.cpp @@ -47,8 +47,8 @@ auto PacketValidator::blockedBy(const magic_enum::containers::bitsetPAI->IsEngaged()) CHECK_BLOCKED(BlockedState::AbnormalStatus, PChar_->status != STATUS_TYPE::NORMAL) CHECK_BLOCKED(BlockedState::Monstrosity, PChar_->m_PMonstrosity != nullptr) - CHECK_BLOCKED(BlockedState::Healing, PChar_->StatusEffectContainer->HasStatusEffect(EFFECT_HEALING) || PChar_->animation == ANIMATION_HEALING) - CHECK_BLOCKED(BlockedState::Charmed, PChar_->StatusEffectContainer->HasStatusEffect({ EFFECT_CHARM, EFFECT_CHARM_II })) + CHECK_BLOCKED(BlockedState::Healing, PChar_->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Healing) || PChar_->animation == ANIMATION_HEALING) + CHECK_BLOCKED(BlockedState::Charmed, PChar_->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::CharmI, xi::StatusEffect::CharmIi })) CHECK_BLOCKED(BlockedState::PreventAction, PChar_->StatusEffectContainer->HasPreventActionEffect()) // clang-format on diff --git a/src/map/packets/char_status.cpp b/src/map/packets/char_status.cpp index 72b408745f7..1a741e6fd18 100644 --- a/src/map/packets/char_status.cpp +++ b/src/map/packets/char_status.cpp @@ -270,7 +270,7 @@ CCharStatusPacket::CCharStatusPacket(CCharEntity* PChar) flags0.unknown_3_28 = 0; // Unknown flags0.GmLevel = PChar->visibleGmLevel; - if (auto* effect = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_MOUNTED)) + if (auto* effect = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Mounted)) { const auto [ChocoboIndex, CustomProperties] = mountutils::packetDefinition(PChar); packet->mount_id = effect->GetPower(); @@ -284,7 +284,7 @@ CCharStatusPacket::CCharStatusPacket(CCharEntity* PChar) flags1.Hackmove = PChar->wallhackEnabled; // GM wallhack, walk through walls flags1.FreezeFlag = PChar->isFrozenFlagged; // Freezes player in place, making them unable to move. Used when opening treasure chests, for instance. flags1.unknown_1_14 = 0; // Unknown. - flags1.InvisFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_INVISIBLE); + flags1.InvisFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Invisible); flags1.unknown_2_16 = 0; // Unknown. flags1.SpeedBase = PChar->animationSpeed; flags1.unknown_3_25 = 0; // Unknown @@ -297,7 +297,7 @@ CCharStatusPacket::CCharStatusPacket(CCharEntity* PChar) flags2.NamedFlag = false; // disable "The" flags2.SingleFlag = false; // singular entity flags2.AutoPartyFlag = false; // Not implemented. - flags2.MotStopFlag = PChar->StatusEffectContainer->HasStatusEffect(EFFECT_TERROR); + flags2.MotStopFlag = PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Terror); flags2.CliPriorityFlag = PChar->priorityRender; flags2.BallistaFlg = static_cast(PChar->allegiance); flags2.unknown_3_29 = 0; // Unknown, one of three bits appears to be campaign battle Sword & Shield Icon? @@ -312,7 +312,7 @@ CCharStatusPacket::CCharStatusPacket(CCharEntity* PChar) flags3.LfgMasterFlag = false; // /inv icon WITH mastery star. Not currently implemented, this is set with the "Request" button in the Party menu. flags3.TrialFlag = false; // Trial account icon flag - flags3.SilenceFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK); + flags3.SilenceFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sneak); flags3.NewCharacterFlag = PChar->isNewPlayer(); flags3.MentorFlag = PChar->aman().isMentor(); flags3.unknown_0_5 = 0; // unknown @@ -330,15 +330,15 @@ CCharStatusPacket::CCharStatusPacket(CCharEntity* PChar) flags4.JobMasterFlag = PChar->getMod(Mod::SUPERIOR_LEVEL) == 5 && PChar->m_jobMasterDisplay; // GEO bubble effects, changes bubble effect depending on what effect is activated. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_COLURE_ACTIVE)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::ColureActive)) { - flags4.GeoIndiElement = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_COLURE_ACTIVE)->GetPower(); + flags4.GeoIndiElement = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::ColureActive)->GetPower(); flags4.GeoIndiFlag = 1; } // Size shouldn't change until the bubble is re-casted, but currently WIDENED COMPASS will widen the size of the bubble on the effect instantly, so this aligns with the code. // TODO: fix the discrepancy with retail. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_WIDENED_COMPASS)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::WidenedCompass)) { flags4.GeoIndiSize = 2; } diff --git a/src/map/packets/char_sync.cpp b/src/map/packets/char_sync.cpp index d9313590f64..0787868f28b 100644 --- a/src/map/packets/char_sync.cpp +++ b/src/map/packets/char_sync.cpp @@ -36,9 +36,9 @@ CCharSyncPacket::CCharSyncPacket(CCharEntity* PChar) ref(0x08) = PChar->id; // ref(0x0C) = PChar->PFellow ? PChar->PFellow->targid : 0 - ref(0x10) = PChar->StatusEffectContainer->HasStatusEffect(EFFECT_ALLIED_TAGS) ? 0x02 : 0x00; // 0x02 - Campaign Battle, 0x04 - Level Sync + ref(0x10) = PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AlliedTags) ? 0x02 : 0x00; // 0x02 - Campaign Battle, 0x04 - Level Sync - if (PChar->m_LevelRestriction && PChar->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC)) + if (PChar->m_LevelRestriction && PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync)) { if (PChar->PBattlefield == nullptr) { @@ -49,10 +49,10 @@ CCharSyncPacket::CCharSyncPacket(CCharEntity* PChar) ref(0x26) = PChar->m_LevelRestriction; } - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_MOUNTED)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Mounted)) { const auto [ChocoboIndex, CustomProperties] = mountutils::packetDefinition(PChar); - ref(0x13) = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_MOUNTED)->GetSubPower(); + ref(0x13) = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Mounted)->GetSubPower(); ref(0x18) = CustomProperties[0]; // Personal Chocobo model ref(0x1C) = CustomProperties[1]; // Noble Chocobo } diff --git a/src/map/packets/char_update.cpp b/src/map/packets/char_update.cpp index b475830071b..88fc6af8d01 100644 --- a/src/map/packets/char_update.cpp +++ b/src/map/packets/char_update.cpp @@ -313,7 +313,7 @@ void CCharUpdatePacket::updateWith(CCharEntity* PChar, ENTITYUPDATE type, uint8 packet->Flags1.TalkUcoffFlag = 0; // Unknown, but used with events. // TOOD: verify how/when this is used. packet->Flags1.GmLevel = PChar->visibleGmLevel; packet->Flags1.HackMove = PChar->wallhackEnabled; - packet->Flags1.InvisFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_INVISIBLE); + packet->Flags1.InvisFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Invisible); packet->Flags1.TurnFlag = 0; // I do not believe we currently use this. // TOOD: get the lerp values from retail somehow. packet->Flags1.BazaarFlag = PChar->hasBazaar(); @@ -338,12 +338,12 @@ void CCharUpdatePacket::updateWith(CCharEntity* PChar, ENTITYUPDATE type, uint8 packet->Flags3.TrustFlag = 0; packet->Flags3.LfgMasterFlag = 0; // Not implemented. This is LFP while job mastered when seeking a master party. (job master star next to inv icon) packet->Flags3.PetNewFlag = 0; - packet->Flags3.MotStopFlag = PChar->StatusEffectContainer->HasStatusEffect(EFFECT_TERROR); + packet->Flags3.MotStopFlag = PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Terror); packet->Flags3.CliPriorityFlag = PChar->priorityRender; packet->Flags3.PetFlag = 0; packet->Flags3.BallistaTeam = static_cast(PChar->allegiance); // Also used during Ballista with slightly different values. packet->Flags3.MonStat = 0; // Some monstrosity flag. // TODO: verify if we already use this. - packet->Flags3.SilenceFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK); + packet->Flags3.SilenceFlag = PChar->m_isGMHidden || PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sneak); packet->Flags3.NewCharacterFlag = !PChar->playerConfig.NewAdventurerOffFlg; packet->Flags3.MentorFlag = PChar->playerConfig.MentorFlg; @@ -352,15 +352,15 @@ void CCharUpdatePacket::updateWith(CCharEntity* PChar, ENTITYUPDATE type, uint8 packet->Flags5.GeoIndiElement = 0; // GEO bubble effects, changes bubble effect depending on what effect is activated. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_COLURE_ACTIVE)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::ColureActive)) { - packet->Flags5.GeoIndiElement = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_COLURE_ACTIVE)->GetPower(); + packet->Flags5.GeoIndiElement = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::ColureActive)->GetPower(); packet->Flags5.GeoIndiFlag = 1; } // Size shouldn't change until the bubble is re-casted, but currently WIDENED COMPASS will widen the size of the bubble on the effect instantly, so this aligns with the code. // TODO: fix the discrepancy with retail. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_WIDENED_COMPASS)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::WidenedCompass)) { packet->Flags5.GeoIndiSize = 2; } diff --git a/src/map/packets/entity_update.cpp b/src/map/packets/entity_update.cpp index d470f9c9f9e..dc458f04f90 100644 --- a/src/map/packets/entity_update.cpp +++ b/src/map/packets/entity_update.cpp @@ -391,7 +391,7 @@ void CEntityUpdatePacket::updateWith(CBaseEntity* PEntity, ENTITYUPDATE type, ui { ref(0x27) |= 0x08; } - ref(0x28) |= PMob->StatusEffectContainer->HasStatusEffect(EFFECT_TERROR) ? 0x10 : 0x00; + ref(0x28) |= PMob->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Terror) ? 0x10 : 0x00; // Giga hack -- mobs in Pso'Xja for some reason are less "visible" // Set CliPriorityFlag to force them to render on the client if they receive 0x00Es diff --git a/src/map/packets/s2c/0x00a_login.cpp b/src/map/packets/s2c/0x00a_login.cpp index 4f644568758..75c8d99dfa0 100644 --- a/src/map/packets/s2c/0x00a_login.cpp +++ b/src/map/packets/s2c/0x00a_login.cpp @@ -127,9 +127,9 @@ GP_SERV_COMMAND_LOGIN::GP_SERV_COMMAND_LOGIN(CCharEntity* PChar, const EventInfo uint32_t flags2 = 0; // Mount sub power in byte 0 (bits 0-7) - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_MOUNTED)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Mounted)) { - flags2 |= static_cast(PChar->StatusEffectContainer->GetStatusEffect(EFFECT_MOUNTED)->GetSubPower()); + flags2 |= static_cast(PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Mounted)->GetSubPower()); } // Gender and size in byte 1 (bits 8-15) diff --git a/src/map/packets/s2c/0x063_miscdata_status_icons.cpp b/src/map/packets/s2c/0x063_miscdata_status_icons.cpp index d769ed6b2bf..e85696af599 100644 --- a/src/map/packets/s2c/0x063_miscdata_status_icons.cpp +++ b/src/map/packets/s2c/0x063_miscdata_status_icons.cpp @@ -44,7 +44,7 @@ GP_SERV_COMMAND_MISCDATA::STATUS_ICONS::STATUS_ICONS(const CCharEntity* PChar) if (PEffect->GetIcon() != 0) { uint32 timestamp = NO_TIMER; - if (PEffect->GetDuration() > 0s && !PEffect->HasEffectFlag(EFFECTFLAG_HIDE_TIMER)) + if (PEffect->GetDuration() > 0s && !PEffect->HasEffectFlag(xi::StatusEffectFlag::HideTimer)) { // this value overflows, but the client expects the overflowed timestamp and corrects it uint32 seconds = timer::count_seconds(PEffect->GetStartTime() - timer::now() + PEffect->GetDuration()); diff --git a/src/map/party.cpp b/src/map/party.cpp index 38a793c1599..a92dc852270 100644 --- a/src/map/party.cpp +++ b/src/map/party.cpp @@ -147,7 +147,7 @@ void CParty::DisbandParty(bool playerInitiated) PChar->PTreasurePool->addMember(PChar); PChar->PTreasurePool->updatePool(PChar); } - CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC); + CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync); if (sync && sync->GetDuration() == 0s) { PChar->pushPacket(PChar, PChar, 0, 30, MsgStd::LevelSyncRemoveLeftParty); @@ -318,7 +318,7 @@ void CParty::RemoveMember(CBattleEntity* PEntity) if (m_PSyncTarget == PChar) { SetSyncTarget("", MsgStd::LevelSyncRemoveLeftParty); - CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC); + CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync); if (sync && sync->GetDuration() == 0s) { PChar->pushPacket(PChar, PChar, 0, 30, MsgStd::LevelSyncRemoveLeftParty); @@ -331,7 +331,7 @@ void CParty::RemoveMember(CBattleEntity* PEntity) { if (PChar->status != STATUS_TYPE::DISAPPEAR) { - CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC); + CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync); if (sync && sync->GetDuration() == 0s) { PChar->pushPacket(PChar, PChar, 0, 30, MsgStd::LevelSyncRemoveLeftParty); @@ -415,7 +415,7 @@ void CParty::DelMember(CBattleEntity* PEntity) if (m_PSyncTarget == PChar) { SetSyncTarget("", MsgStd::LevelSyncRemoveLeftParty); - CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC); + CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync); if (sync && sync->GetDuration() == 0s) { PChar->pushPacket(PChar, PChar, 0, 30, MsgStd::LevelSyncRemoveLeftParty); @@ -428,7 +428,7 @@ void CParty::DelMember(CBattleEntity* PEntity) { if (PChar->status != STATUS_TYPE::DISAPPEAR) { - CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC); + CStatusEffect* sync = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync); if (sync && sync->GetDuration() == 0s) { PChar->pushPacket(PChar, PChar, 0, 30, MsgStd::LevelSyncRemoveLeftParty); @@ -684,8 +684,8 @@ void CParty::AddMember(CBattleEntity* PEntity) if (PChar->getZone() == m_PSyncTarget->getZone()) { PChar->pushPacket(PChar, PChar, 0, m_PSyncTarget->GetMLevel(), MsgStd::LevelSyncActivated); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DISPELABLE | EFFECTFLAG_ON_ZONE); - PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_LEVEL_SYNC, EFFECT_LEVEL_SYNC, m_PSyncTarget->GetMLevel(), 0s, 0s), EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Dispelable | xi::StatusEffectFlag::OnZone); + PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::LevelSync, static_cast(xi::StatusEffect::LevelSync), m_PSyncTarget->GetMLevel(), 0s, 0s), EffectNotice::Silent); PChar->loc.zone->PushPacket(PChar, CHAR_INRANGE, std::make_unique(PChar)); } } @@ -1140,7 +1140,7 @@ void CParty::SetSyncTarget(const std::string& MemberName, MsgStd message) { for (auto& member : members) { - if (member->StatusEffectContainer->HasStatusEffect({ EFFECT_LEVEL_RESTRICTION, EFFECT_LEVEL_SYNC, EFFECT_SJ_RESTRICTION, EFFECT_CONFRONTATION, EFFECT_BATTLEFIELD })) + if (member->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::LevelRestriction, xi::StatusEffect::LevelSync, xi::StatusEffect::SjRestriction, xi::StatusEffect::Confrontation, xi::StatusEffect::Battlefield })) { ((CCharEntity*)GetLeader())->pushPacket((CCharEntity*)GetLeader(), (CCharEntity*)GetLeader(), 0, 0, MsgStd::LevelSyncPreventedByStatus); return; @@ -1159,8 +1159,8 @@ void CParty::SetSyncTarget(const std::string& MemberName, MsgStd message) if (member->status != STATUS_TYPE::DISAPPEAR && member->getZone() == PChar->getZone()) { member->pushPacket(PChar->GetMLevel(), 0, 0, 0, message); - member->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DISPELABLE | EFFECTFLAG_ON_ZONE); - member->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_LEVEL_SYNC, EFFECT_LEVEL_SYNC, PChar->GetMLevel(), 0s, 0s), EffectNotice::Silent); + member->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Dispelable | xi::StatusEffectFlag::OnZone); + member->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::LevelSync, static_cast(xi::StatusEffect::LevelSync), PChar->GetMLevel(), 0s, 0s), EffectNotice::Silent); member->loc.zone->PushPacket(member, CHAR_INRANGE, std::make_unique(member)); } } @@ -1190,7 +1190,7 @@ void CParty::SetSyncTarget(const std::string& MemberName, MsgStd message) if (member->status != STATUS_TYPE::DISAPPEAR) { - CStatusEffect* sync = member->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC); + CStatusEffect* sync = member->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync); if (sync && sync->GetDuration() == 0s) { member->pushPacket(member, member, 0, 30, message); @@ -1320,7 +1320,7 @@ void CParty::RefreshSync() NewMLevel = member->jobs.job[member->GetMJob()]; } - CStatusEffect* syncEffect = member->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC); + CStatusEffect* syncEffect = member->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync); if (syncEffect != nullptr) { syncEffect->SetPower(syncLevel); diff --git a/src/map/spell.cpp b/src/map/spell.cpp index 22107ea9ca3..f19014438ba 100644 --- a/src/map/spell.cpp +++ b/src/map/spell.cpp @@ -719,7 +719,7 @@ bool CanUseSpell(CBattleEntity* PCaster, CSpell* spell) usable = true; if (requirements & SPELLREQ_TABULA_RASA) { - if (!PCaster->StatusEffectContainer->HasStatusEffect(EFFECT_TABULA_RASA)) + if (!PCaster->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TabulaRasa)) { usable = false; } @@ -728,14 +728,14 @@ bool CanUseSpell(CBattleEntity* PCaster, CSpell* spell) { if (requirements & SPELLREQ_ADDENDUM_BLACK) { - if (!PCaster->StatusEffectContainer->HasStatusEffect({ EFFECT_ADDENDUM_BLACK, EFFECT_ENLIGHTENMENT })) + if (!PCaster->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::AddendumBlack, xi::StatusEffect::Enlightenment })) { usable = false; } } else if (requirements & SPELLREQ_ADDENDUM_WHITE) { - if (!PCaster->StatusEffectContainer->HasStatusEffect({ EFFECT_ADDENDUM_WHITE, EFFECT_ENLIGHTENMENT })) + if (!PCaster->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::AddendumWhite, xi::StatusEffect::Enlightenment })) { usable = false; } @@ -745,7 +745,7 @@ bool CanUseSpell(CBattleEntity* PCaster, CSpell* spell) { if (requirements & SPELLREQ_UNBRIDLED_LEARNING) { - if (!PCaster->StatusEffectContainer->HasStatusEffect({ EFFECT_UNBRIDLED_LEARNING, EFFECT_UNBRIDLED_WISDOM })) + if (!PCaster->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::UnbridledLearning, xi::StatusEffect::UnbridledWisdom })) { usable = false; } @@ -767,7 +767,7 @@ bool CanUseSpell(CBattleEntity* PCaster, CSpell* spell) usable = true; if (requirements & SPELLREQ_TABULA_RASA) { - if (!PCaster->StatusEffectContainer->HasStatusEffect(EFFECT_TABULA_RASA)) + if (!PCaster->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TabulaRasa)) { usable = false; } @@ -776,14 +776,14 @@ bool CanUseSpell(CBattleEntity* PCaster, CSpell* spell) { if (requirements & SPELLREQ_ADDENDUM_BLACK) { - if (!PCaster->StatusEffectContainer->HasStatusEffect({ EFFECT_ADDENDUM_BLACK, EFFECT_ENLIGHTENMENT })) + if (!PCaster->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::AddendumBlack, xi::StatusEffect::Enlightenment })) { usable = false; } } else if (requirements & SPELLREQ_ADDENDUM_WHITE) { - if (!PCaster->StatusEffectContainer->HasStatusEffect({ EFFECT_ADDENDUM_WHITE, EFFECT_ENLIGHTENMENT })) + if (!PCaster->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::AddendumWhite, xi::StatusEffect::Enlightenment })) { usable = false; } @@ -793,7 +793,7 @@ bool CanUseSpell(CBattleEntity* PCaster, CSpell* spell) { if (requirements & SPELLREQ_UNBRIDLED_LEARNING) { - if (!PCaster->StatusEffectContainer->HasStatusEffect({ EFFECT_UNBRIDLED_LEARNING, EFFECT_UNBRIDLED_WISDOM })) + if (!PCaster->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::UnbridledLearning, xi::StatusEffect::UnbridledWisdom })) { usable = false; } diff --git a/src/map/status_effect.cpp b/src/map/status_effect.cpp index f5f649c5485..8d5bdde21c7 100644 --- a/src/map/status_effect.cpp +++ b/src/map/status_effect.cpp @@ -27,7 +27,7 @@ #include "status_effect_container.h" #include -CStatusEffect::CStatusEffect(EFFECT id, uint16 icon, uint16 power, timer::duration tick, timer::duration duration, uint32 subid, uint16 subPower, uint16 subIcon, uint16 tier, uint32 flags, uint16 sourceType, uint32 sourceTypeParam, uint32 originID) +CStatusEffect::CStatusEffect(xi::StatusEffect id, uint16 icon, uint16 power, timer::duration tick, timer::duration duration, uint32 subid, uint16 subPower, uint16 subIcon, uint16 tier, xi::StatusEffectFlag flags, uint16 sourceType, uint32 sourceTypeParam, uint32 originID) : m_StatusID(id) , m_SubID(subid) , m_Icon(icon) @@ -44,7 +44,7 @@ CStatusEffect::CStatusEffect(EFFECT id, uint16 icon, uint16 power, timer::durati { if (m_TickTime < 3s && m_TickTime != 0s) { - ShowWarning("Status Effect tick time less than 3s is no longer supported. Effect ID: %d", id); + ShowWarning("Status Effect tick time less than 3s is no longer supported. Effect ID: %d", static_cast(id)); } } @@ -60,7 +60,7 @@ void CStatusEffect::SetOwner(CBattleEntity* Owner) m_POwner = Owner; } -EFFECT CStatusEffect::GetStatusID() +auto CStatusEffect::GetStatusID() -> xi::StatusEffect { return m_StatusID; } @@ -125,7 +125,7 @@ uint16 CStatusEffect::GetTier() const return m_Tier; } -uint32 CStatusEffect::GetEffectFlags() const +auto CStatusEffect::GetEffectFlags() const -> xi::StatusEffectFlag { return m_Flags; } @@ -150,28 +150,24 @@ timer::time_point CStatusEffect::GetStartTime() return m_StartTime; } -void CStatusEffect::SetEffectFlags(uint32 Flags) +void CStatusEffect::SetEffectFlags(xi::StatusEffectFlag Flags) { m_Flags = Flags; } -void CStatusEffect::AddEffectFlag(uint32 Flag) +void CStatusEffect::AddEffectFlag(xi::StatusEffectFlag Flag) { m_Flags |= Flag; } -void CStatusEffect::DelEffectFlag(uint32 flag) +void CStatusEffect::DelEffectFlag(xi::StatusEffectFlag flag) { m_Flags &= ~flag; } -bool CStatusEffect::HasEffectFlag(uint32 Flag) +auto CStatusEffect::HasEffectFlag(xi::StatusEffectFlag Flag) -> bool { - if (m_Flags & Flag) - { - return true; - } - return false; + return (m_Flags & Flag) != xi::StatusEffectFlag::None; } void CStatusEffect::SetIcon(uint16 Icon) diff --git a/src/map/status_effect.h b/src/map/status_effect.h index df59625695c..fe4c663ae69 100644 --- a/src/map/status_effect.h +++ b/src/map/status_effect.h @@ -22,758 +22,21 @@ #pragma once #include "common/cbasetypes.h" -#include "common/logging.h" #include "common/mmo.h" #include #include "modifier.h" -enum class EFFECTOVERWRITE : uint8 -{ - EQUAL_HIGHER = 0, // only overwrite if equal or higher (tier, power) - HIGHER = 1, // only overwrite if higher (tier, power) - NEVER = 2, // never overwrite - ALWAYS = 3, // always overwrite no matter - IGNORE_DUPLICATE = 4, // ignore dupes - TIER_HIGHER = 5 // only overwrite if tier is higher (regardless of power) -}; -DECLARE_FORMAT_AS_UNDERLYING(EFFECTOVERWRITE); - -enum EFFECTFLAG : uint32 -{ - EFFECTFLAG_NONE = 0x00000000, - EFFECTFLAG_DISPELABLE = 0x00000001, - EFFECTFLAG_ERASABLE = 0x00000002, - EFFECTFLAG_ATTACK = 0x00000004, // disappears upon attacking - EFFECTFLAG_EMPATHY = 0X00000008, // effect can be copied to wyvern by use of merited Spirit Link - EFFECTFLAG_DAMAGE = 0x00000010, // disappears upon being attacked - EFFECTFLAG_DEATH = 0x00000020, // disappears upon death/KO - EFFECTFLAG_MAGIC_BEGIN = 0x00000040, // disappears upon spellcasting start - EFFECTFLAG_MAGIC_END = 0x00000080, // disappears upon spellcasting complete - EFFECTFLAG_ON_ZONE = 0x00000100, - EFFECTFLAG_NO_LOSS_MESSAGE = 0x00000200, // Suppress effect worn off message. - EFFECTFLAG_INVISIBLE = 0x00000400, // invisible effect - EFFECTFLAG_DETECTABLE = 0x00000800, // invisible, sneak, deo - EFFECTFLAG_NO_REST = 0x00001000, // prevents resting, curse II, plague, disease - EFFECTFLAG_PREVENT_ACTION = 0x00002000, // sleep, lullaby, stun, petrify - EFFECTFLAG_WALTZABLE = 0x00004000, // for healing waltzable spells - EFFECTFLAG_FOOD = 0x00008000, - EFFECTFLAG_SONG = 0x00010000, // bard songs - EFFECTFLAG_ROLL = 0x00020000, // corsair rolls - EFFECTFLAG_SYNTH_SUPPORT = 0x00040000, // Synthesis Image Support - EFFECTFLAG_CONFRONTATION = 0x00080000, - EFFECTFLAG_LOGOUT = 0x00100000, - EFFECTFLAG_BLOODPACT = 0x00200000, - EFFECTFLAG_ON_JOBCHANGE = 0x00400000, // Removes effect when you change jobs - EFFECTFLAG_NO_CANCEL = 0x00800000, // CAN NOT CLICK IT OFF IN CLIENT - EFFECTFLAG_INFLUENCE = 0x01000000, // Influence effects - e.g. Signet, Sanction, Sigil, Ionis - EFFECTFLAG_OFFLINE_TICK = 0x02000000, // Duration elapses while offline - EFFECTFLAG_AURA = 0x04000000, // Is an aura type effect - EFFECTFLAG_HIDE_TIMER = 0x08000000, // Sends "Always" in the packet, even though timer is tracked - EFFECTFLAG_ON_ZONE_PATHOS = 0x10000000, // removes the effect zoning into a non instanced zone - EFFECTFLAG_ALWAYS_EXPIRING = 0x20000000, // Timer is always 4 seconds from now to have an illusion permanent "expiring", used for Auras - EFFECTFLAG_ON_ATTACK = 0x40000000, // Removes effect upon receiving an attack, regardless of hit/dmg -}; -DECLARE_FORMAT_AS_UNDERLYING(EFFECTFLAG); - -enum EFFECT : uint16 -{ - EFFECT_KO = 0, - EFFECT_WEAKNESS = 1, - EFFECT_SLEEP = 2, - EFFECT_POISON = 3, - EFFECT_PARALYSIS = 4, - EFFECT_BLINDNESS = 5, - EFFECT_SILENCE = 6, - EFFECT_PETRIFICATION = 7, - EFFECT_DISEASE = 8, - EFFECT_CURSE = 9, - EFFECT_STUN = 10, - EFFECT_BIND = 11, - EFFECT_WEIGHT = 12, - EFFECT_SLOW = 13, - EFFECT_CHARM = 14, - EFFECT_DOOM = 15, - EFFECT_AMNESIA = 16, - EFFECT_CHARM_II = 17, - EFFECT_GRADUAL_PETRIFICATION = 18, - EFFECT_SLEEP_II = 19, - EFFECT_CURSE_II = 20, - EFFECT_ADDLE = 21, - EFFECT_INTIMIDATE = 22, - EFFECT_KAUSTRA = 23, - EFFECT_TERROR = 28, - EFFECT_MUTE = 29, - EFFECT_BANE = 30, - EFFECT_PLAGUE = 31, - EFFECT_FLEE = 32, - EFFECT_HASTE = 33, - EFFECT_BLAZE_SPIKES = 34, - EFFECT_ICE_SPIKES = 35, - EFFECT_BLINK = 36, - EFFECT_STONESKIN = 37, - EFFECT_SHOCK_SPIKES = 38, - EFFECT_AQUAVEIL = 39, - EFFECT_PROTECT = 40, - EFFECT_SHELL = 41, - EFFECT_REGEN = 42, - EFFECT_REFRESH = 43, - EFFECT_MIGHTY_STRIKES = 44, - EFFECT_BOOST = 45, - EFFECT_HUNDRED_FISTS = 46, - EFFECT_MANAFONT = 47, - EFFECT_CHAINSPELL = 48, - EFFECT_PERFECT_DODGE = 49, - EFFECT_INVINCIBLE = 50, - EFFECT_BLOOD_WEAPON = 51, - EFFECT_SOUL_VOICE = 52, - EFFECT_EAGLE_EYE_SHOT = 53, - EFFECT_MEIKYO_SHISUI = 54, - EFFECT_ASTRAL_FLOW = 55, - EFFECT_BERSERK = 56, - EFFECT_DEFENDER = 57, - EFFECT_AGGRESSOR = 58, - EFFECT_FOCUS = 59, - EFFECT_DODGE = 60, - EFFECT_COUNTERSTANCE = 61, - EFFECT_SENTINEL = 62, - EFFECT_SOULEATER = 63, - EFFECT_LAST_RESORT = 64, - EFFECT_SNEAK_ATTACK = 65, - EFFECT_COPY_IMAGE = 66, - EFFECT_COPY_IMAGE_1 = 66, - EFFECT_THIRD_EYE = 67, - EFFECT_WARCRY = 68, - EFFECT_INVISIBLE = 69, - EFFECT_DEODORIZE = 70, - EFFECT_SNEAK = 71, - EFFECT_SHARPSHOT = 72, - EFFECT_BARRAGE = 73, - EFFECT_HOLY_CIRCLE = 74, - EFFECT_ARCANE_CIRCLE = 75, - EFFECT_HIDE = 76, - EFFECT_CAMOUFLAGE = 77, - EFFECT_DIVINE_SEAL = 78, - EFFECT_ELEMENTAL_SEAL = 79, - EFFECT_STR_BOOST = 80, - EFFECT_DEX_BOOST = 81, - EFFECT_VIT_BOOST = 82, - EFFECT_AGI_BOOST = 83, - EFFECT_INT_BOOST = 84, - EFFECT_MND_BOOST = 85, - EFFECT_CHR_BOOST = 86, - EFFECT_TRICK_ATTACK = 87, - EFFECT_MAX_HP_BOOST = 88, - EFFECT_MAX_MP_BOOST = 89, - EFFECT_ACCURACY_BOOST = 90, - EFFECT_ATTACK_BOOST = 91, - EFFECT_EVASION_BOOST = 92, - EFFECT_DEFENSE_BOOST = 93, - EFFECT_ENFIRE = 94, - EFFECT_ENBLIZZARD = 95, - EFFECT_ENAERO = 96, - EFFECT_ENSTONE = 97, - EFFECT_ENTHUNDER = 98, - EFFECT_ENWATER = 99, - EFFECT_BARFIRE = 100, - EFFECT_BARBLIZZARD = 101, - EFFECT_BARAERO = 102, - EFFECT_BARSTONE = 103, - EFFECT_BARTHUNDER = 104, - EFFECT_BARWATER = 105, - EFFECT_BARSLEEP = 106, - EFFECT_BARPOISON = 107, - EFFECT_BARPARALYZE = 108, - EFFECT_BARBLIND = 109, - EFFECT_BARSILENCE = 110, - EFFECT_BARPETRIFY = 111, - EFFECT_BARVIRUS = 112, - EFFECT_RERAISE = 113, - EFFECT_COVER = 114, - EFFECT_UNLIMITED_SHOT = 115, - EFFECT_PHALANX = 116, - EFFECT_WARDING_CIRCLE = 117, - EFFECT_ANCIENT_CIRCLE = 118, - EFFECT_STR_BOOST_2 = 119, - EFFECT_DEX_BOOST_2 = 120, - EFFECT_VIT_BOOST_2 = 121, - EFFECT_AGI_BOOST_2 = 122, - EFFECT_INT_BOOST_2 = 123, - EFFECT_MND_BOOST_2 = 124, - EFFECT_CHR_BOOST_2 = 125, - EFFECT_SPIRIT_SURGE = 126, - EFFECT_COSTUME = 127, - EFFECT_BURN = 128, - EFFECT_FROST = 129, - EFFECT_CHOKE = 130, - EFFECT_RASP = 131, - EFFECT_SHOCK = 132, - EFFECT_DROWN = 133, - EFFECT_DIA = 134, - EFFECT_BIO = 135, - EFFECT_STR_DOWN = 136, - EFFECT_DEX_DOWN = 137, - EFFECT_VIT_DOWN = 138, - EFFECT_AGI_DOWN = 139, - EFFECT_INT_DOWN = 140, - EFFECT_MND_DOWN = 141, - EFFECT_CHR_DOWN = 142, - EFFECT_LEVEL_RESTRICTION = 143, - EFFECT_MAX_HP_DOWN = 144, - EFFECT_MAX_MP_DOWN = 145, - EFFECT_ACCURACY_DOWN = 146, - EFFECT_ATTACK_DOWN = 147, - EFFECT_EVASION_DOWN = 148, - EFFECT_DEFENSE_DOWN = 149, - EFFECT_PHYSICAL_SHIELD = 150, - EFFECT_ARROW_SHIELD = 151, - EFFECT_MAGIC_SHIELD = 152, - EFFECT_DAMAGE_SPIKES = 153, - EFFECT_SHINING_RUBY = 154, - EFFECT_MEDICINE = 155, - EFFECT_FLASH = 156, - EFFECT_SJ_RESTRICTION = 157, - EFFECT_PROVOKE = 158, - EFFECT_PENALTY = 159, - EFFECT_PREPARATIONS = 160, - EFFECT_SPRINT = 161, - EFFECT_ENCHANTMENT = 162, - EFFECT_AZURE_LORE = 163, - EFFECT_CHAIN_AFFINITY = 164, - EFFECT_BURST_AFFINITY = 165, - EFFECT_OVERDRIVE = 166, - EFFECT_MAGIC_DEF_DOWN = 167, - EFFECT_INHIBIT_TP = 168, - EFFECT_POTENCY = 169, - EFFECT_REGAIN = 170, - EFFECT_PAX = 171, - EFFECT_INTENSION = 172, - EFFECT_DREAD_SPIKES = 173, - EFFECT_MAGIC_ACC_DOWN = 174, - EFFECT_MAGIC_ATK_DOWN = 175, - EFFECT_QUICKENING = 176, - EFFECT_ENCUMBRANCE_II = 177, - EFFECT_FIRESTORM = 178, - EFFECT_HAILSTORM = 179, - EFFECT_WINDSTORM = 180, - EFFECT_SANDSTORM = 181, - EFFECT_THUNDERSTORM = 182, - EFFECT_RAINSTORM = 183, - EFFECT_AURORASTORM = 184, - EFFECT_VOIDSTORM = 185, - EFFECT_HELIX = 186, - EFFECT_SUBLIMATION_ACTIVATED = 187, - EFFECT_SUBLIMATION_COMPLETE = 188, - EFFECT_MAX_TP_DOWN = 189, - EFFECT_MAGIC_ATK_BOOST = 190, - EFFECT_MAGIC_DEF_BOOST = 191, - EFFECT_REQUIEM = 192, - EFFECT_LULLABY = 193, - EFFECT_ELEGY = 194, - EFFECT_PAEON = 195, - EFFECT_BALLAD = 196, - EFFECT_MINNE = 197, - EFFECT_MINUET = 198, - EFFECT_MADRIGAL = 199, - EFFECT_PRELUDE = 200, - EFFECT_MAMBO = 201, - EFFECT_AUBADE = 202, - EFFECT_PASTORAL = 203, - EFFECT_HUM = 204, - EFFECT_FANTASIA = 205, - EFFECT_OPERETTA = 206, - EFFECT_CAPRICCIO = 207, - EFFECT_SERENADE = 208, - EFFECT_ROUND = 209, - EFFECT_GAVOTTE = 210, - EFFECT_FUGUE = 211, - EFFECT_RHAPSODY = 212, - EFFECT_ARIA = 213, - EFFECT_MARCH = 214, - EFFECT_ETUDE = 215, - EFFECT_CAROL = 216, - EFFECT_THRENODY = 217, - EFFECT_HYMNUS = 218, - EFFECT_MAZURKA = 219, - EFFECT_SIRVENTE = 220, - EFFECT_DIRGE = 221, - EFFECT_SCHERZO = 222, - EFFECT_NOCTURNE = 223, - EFFECT_STORE_TP = 227, - EFFECT_EMBRAVA = 228, - EFFECT_MANAWELL = 229, - EFFECT_SPONTANEITY = 230, - EFFECT_MARCATO = 231, - EFFECT_NA = 232, - EFFECT_AUTO_REGEN = 233, - EFFECT_AUTO_REFRESH = 234, - EFFECT_FISHING_IMAGERY = 235, - EFFECT_WOODWORKING_IMAGERY = 236, - EFFECT_SMITHING_IMAGERY = 237, - EFFECT_GOLDSMITHING_IMAGERY = 238, - EFFECT_CLOTHCRAFT_IMAGERY = 239, - EFFECT_LEATHERCRAFT_IMAGERY = 240, - EFFECT_BONECRAFT_IMAGERY = 241, - EFFECT_ALCHEMY_IMAGERY = 242, - EFFECT_COOKING_IMAGERY = 243, - EFFECT_IMAGERY_1 = 244, - EFFECT_IMAGERY_2 = 245, - EFFECT_IMAGERY_3 = 246, - EFFECT_IMAGERY_4 = 247, - EFFECT_IMAGERY_5 = 248, - EFFECT_DEDICATION = 249, - EFFECT_EF_BADGE = 250, - EFFECT_FOOD = 251, - EFFECT_MOUNTED = 252, - EFFECT_SIGNET = 253, - EFFECT_BATTLEFIELD = 254, - EFFECT_NONE = 255, - EFFECT_SANCTION = 256, - EFFECT_BESIEGED = 257, - EFFECT_ILLUSION = 258, - EFFECT_ENCUMBRANCE = 259, - EFFECT_OBLIVISCENCE = 260, - EFFECT_IMPAIRMENT = 261, - EFFECT_OMERTA = 262, - EFFECT_DEBILITATION = 263, - EFFECT_PATHOS = 264, - EFFECT_FLURRY = 265, - EFFECT_CONCENTRATION = 266, - EFFECT_ALLIED_TAGS = 267, - EFFECT_SIGIL = 268, - EFFECT_LEVEL_SYNC = 269, - EFFECT_AFTERMATH_LV1 = 270, - EFFECT_AFTERMATH_LV2 = 271, - EFFECT_AFTERMATH_LV3 = 272, - EFFECT_AFTERMATH = 273, - EFFECT_ENLIGHT = 274, - EFFECT_AUSPICE = 275, - EFFECT_CONFRONTATION = 276, - EFFECT_ENFIRE_II = 277, - EFFECT_ENBLIZZARD_II = 278, - EFFECT_ENAERO_II = 279, - EFFECT_ENSTONE_II = 280, - EFFECT_ENTHUNDER_II = 281, - EFFECT_ENWATER_II = 282, - EFFECT_PERFECT_DEFENSE = 283, - EFFECT_EGG = 284, - EFFECT_VISITANT = 285, - EFFECT_BARAMNESIA = 286, - EFFECT_ATMA = 287, - EFFECT_ENDARK = 288, - EFFECT_ENMITY_BOOST = 289, - EFFECT_SUBTLE_BLOW_PLUS = 290, - EFFECT_ENMITY_DOWN = 291, - EFFECT_PENNANT = 292, - EFFECT_NEGATE_PETRIFY = 293, - EFFECT_NEGATE_TERROR = 294, - EFFECT_NEGATE_AMNESIA = 295, - EFFECT_NEGATE_DOOM = 296, - EFFECT_NEGATE_POISON = 297, - EFFECT_CRIT_HIT_EVASION_DOWN = 298, - EFFECT_OVERLOAD = 299, - EFFECT_FIRE_MANEUVER = 300, - EFFECT_ICE_MANEUVER = 301, - EFFECT_WIND_MANEUVER = 302, - EFFECT_EARTH_MANEUVER = 303, - EFFECT_THUNDER_MANEUVER = 304, - EFFECT_WATER_MANEUVER = 305, - EFFECT_LIGHT_MANEUVER = 306, - EFFECT_DARK_MANEUVER = 307, - EFFECT_DOUBLE_UP_CHANCE = 308, - EFFECT_BUST = 309, - EFFECT_FIGHTERS_ROLL = 310, - EFFECT_MONKS_ROLL = 311, - EFFECT_HEALERS_ROLL = 312, - EFFECT_WIZARDS_ROLL = 313, - EFFECT_WARLOCKS_ROLL = 314, - EFFECT_ROGUES_ROLL = 315, - EFFECT_GALLANTS_ROLL = 316, - EFFECT_CHAOS_ROLL = 317, - EFFECT_BEAST_ROLL = 318, - EFFECT_CHORAL_ROLL = 319, - EFFECT_HUNTERS_ROLL = 320, - EFFECT_SAMURAI_ROLL = 321, - EFFECT_NINJA_ROLL = 322, - EFFECT_DRACHEN_ROLL = 323, - EFFECT_EVOKERS_ROLL = 324, - EFFECT_MAGUSS_ROLL = 325, - EFFECT_CORSAIRS_ROLL = 326, - EFFECT_PUPPET_ROLL = 327, - EFFECT_DANCERS_ROLL = 328, - EFFECT_SCHOLARS_ROLL = 329, - EFFECT_BOLTERS_ROLL = 330, - EFFECT_CASTERS_ROLL = 331, - EFFECT_COURSERS_ROLL = 332, - EFFECT_BLITZERS_ROLL = 333, - EFFECT_TACTICIANS_ROLL = 334, - EFFECT_ALLIES_ROLL = 335, - EFFECT_MISERS_ROLL = 336, - EFFECT_COMPANIONS_ROLL = 337, - EFFECT_AVENGERS_ROLL = 338, - EFFECT_NATURALISTS_ROLL = 339, - EFFECT_WARRIORS_CHARGE = 340, - EFFECT_FORMLESS_STRIKES = 341, - EFFECT_ASSASSINS_CHARGE = 342, - EFFECT_FEINT = 343, - EFFECT_FEALTY = 344, - EFFECT_DARK_SEAL = 345, - EFFECT_DIABOLIC_EYE = 346, - EFFECT_NIGHTINGALE = 347, - EFFECT_TROUBADOUR = 348, - EFFECT_KILLER_INSTINCT = 349, - EFFECT_STEALTH_SHOT = 350, - EFFECT_FLASHY_SHOT = 351, - EFFECT_SANGE = 352, - EFFECT_HASSO = 353, - EFFECT_SEIGAN = 354, - EFFECT_CONVERGENCE = 355, - EFFECT_DIFFUSION = 356, - EFFECT_SNAKE_EYE = 357, - EFFECT_LIGHT_ARTS = 358, - EFFECT_DARK_ARTS = 359, - EFFECT_PENURY = 360, - EFFECT_PARSIMONY = 361, - EFFECT_CELERITY = 362, - EFFECT_ALACRITY = 363, - EFFECT_RAPTURE = 364, - EFFECT_EBULLIENCE = 365, - EFFECT_ACCESSION = 366, - EFFECT_MANIFESTATION = 367, - EFFECT_DRAIN_SAMBA = 368, - EFFECT_ASPIR_SAMBA = 369, - EFFECT_HASTE_SAMBA = 370, - EFFECT_VELOCITY_SHOT = 371, - EFFECT_BUILDING_FLOURISH = 375, - EFFECT_TRANCE = 376, - EFFECT_TABULA_RASA = 377, - EFFECT_DRAIN_DAZE = 378, - EFFECT_ASPIR_DAZE = 379, - EFFECT_HASTE_DAZE = 380, - EFFECT_FINISHING_MOVE_1 = 381, - EFFECT_FINISHING_MOVE_2 = 382, - EFFECT_FINISHING_MOVE_3 = 383, - EFFECT_FINISHING_MOVE_4 = 384, - EFFECT_FINISHING_MOVE_5 = 385, - EFFECT_LETHARGIC_DAZE_1 = 386, - EFFECT_LETHARGIC_DAZE_2 = 387, - EFFECT_LETHARGIC_DAZE_3 = 388, - EFFECT_LETHARGIC_DAZE_4 = 389, - EFFECT_LETHARGIC_DAZE_5 = 390, - EFFECT_SLUGGISH_DAZE_1 = 391, - EFFECT_SLUGGISH_DAZE_2 = 392, - EFFECT_SLUGGISH_DAZE_3 = 393, - EFFECT_SLUGGISH_DAZE_4 = 394, - EFFECT_SLUGGISH_DAZE_5 = 395, - EFFECT_WEAKENED_DAZE_1 = 396, - EFFECT_WEAKENED_DAZE_2 = 397, - EFFECT_WEAKENED_DAZE_3 = 398, - EFFECT_WEAKENED_DAZE_4 = 399, - EFFECT_WEAKENED_DAZE_5 = 400, - EFFECT_ADDENDUM_WHITE = 401, - EFFECT_ADDENDUM_BLACK = 402, - EFFECT_REPRISAL = 403, - EFFECT_MAGIC_EVASION_DOWN = 404, - EFFECT_RETALIATION = 405, - EFFECT_FOOTWORK = 406, - EFFECT_KLIMAFORM = 407, - EFFECT_SEKKANOKI = 408, - EFFECT_PIANISSIMO = 409, - EFFECT_SABER_DANCE = 410, - EFFECT_FAN_DANCE = 411, - EFFECT_ALTRUISM = 412, - EFFECT_FOCALIZATION = 413, - EFFECT_TRANQUILITY = 414, - EFFECT_EQUANIMITY = 415, - EFFECT_ENLIGHTENMENT = 416, - EFFECT_AFFLATUS_SOLACE = 417, - EFFECT_AFFLATUS_MISERY = 418, - EFFECT_COMPOSURE = 419, - EFFECT_YONIN = 420, - EFFECT_INNIN = 421, - EFFECT_CARBUNCLES_FAVOR = 422, - EFFECT_IFRITS_FAVOR = 423, - EFFECT_SHIVAS_FAVOR = 424, - EFFECT_GARUDAS_FAVOR = 425, - EFFECT_TITANS_FAVOR = 426, - EFFECT_RAMUHS_FAVOR = 427, - EFFECT_LEVIATHANS_FAVOR = 428, - EFFECT_FENRIRS_FAVOR = 429, - EFFECT_DIABOLOSS_FAVOR = 430, - EFFECT_AVATARS_FAVOR = 431, - EFFECT_MULTI_STRIKES = 432, - EFFECT_DOUBLE_SHOT = 433, - EFFECT_TRANSCENDENCY = 434, - EFFECT_RESTRAINT = 435, - EFFECT_PERFECT_COUNTER = 436, - EFFECT_MANA_WALL = 437, - EFFECT_DIVINE_EMBLEM = 438, - EFFECT_NETHER_VOID = 439, - EFFECT_SENGIKORI = 440, - EFFECT_FUTAE = 441, - EFFECT_PRESTO = 442, - EFFECT_CLIMACTIC_FLOURISH = 443, - EFFECT_COPY_IMAGE_2 = 444, - EFFECT_COPY_IMAGE_3 = 445, - EFFECT_COPY_IMAGE_4 = 446, - EFFECT_MULTI_SHOTS = 447, - EFFECT_BEWILDERED_DAZE_1 = 448, - EFFECT_BEWILDERED_DAZE_2 = 449, - EFFECT_BEWILDERED_DAZE_3 = 450, - EFFECT_BEWILDERED_DAZE_4 = 451, - EFFECT_BEWILDERED_DAZE_5 = 452, - EFFECT_DIVINE_CARESS_1 = 453, - EFFECT_SABOTEUR = 454, - EFFECT_TENUTO = 455, - EFFECT_SPUR = 456, - EFFECT_EFFLUX = 457, - EFFECT_EARTHEN_ARMOR = 458, - EFFECT_DIVINE_CARESS_2 = 459, - EFFECT_BLOOD_RAGE = 460, - EFFECT_IMPETUS = 461, - EFFECT_CONSPIRATOR = 462, - EFFECT_SEPULCHER = 463, - EFFECT_ARCANE_CREST = 464, - EFFECT_HAMANOHA = 465, - EFFECT_DRAGON_BREAKER = 466, - EFFECT_TRIPLE_SHOT = 467, - EFFECT_STRIKING_FLOURISH = 468, - EFFECT_PERPETUANCE = 469, - EFFECT_IMMANENCE = 470, - EFFECT_MIGAWARI = 471, - EFFECT_TERNARY_FLOURISH = 472, // DNC 93 - EFFECT_MUDDLE = 473, // MOB EFFECT - EFFECT_PROWESS = 474, // GROUNDS OF VALOR - EFFECT_VOIDWATCHER = 475, // VOIDWATCH - EFFECT_ENSPHERE = 476, // SPHERE - EFFECT_SACROSANCTITY = 477, // WHM 95 - EFFECT_PALISADE = 478, // PLD 95 - EFFECT_SCARLET_DELIRIUM = 479, // DRK 95 - EFFECT_SCARLET_DELIRIUM_1 = 480, // DRK 95 - EFFECT_ABDHALJS_SEAL = 481, - EFFECT_DECOY_SHOT = 482, // RNG 95 - EFFECT_HAGAKURE = 483, // SAM 95 - EFFECT_ISSEKIGAN = 484, // NIN 95 - EFFECT_UNBRIDLED_LEARNING = 485, // BLU 95 - EFFECT_COUNTER_BOOST = 486, // - EFFECT_ENDRAIN = 487, // FENRIR 96 - EFFECT_ENASPIR = 488, // FENRIR 96 - EFFECT_AFTERGLOW = 489, // WS AFTEREFFECT - EFFECT_BRAZEN_RUSH = 490, // - EFFECT_INNER_STRENGTH = 491, - EFFECT_ASYLUM = 492, - EFFECT_SUBTLE_SORCERY = 493, - EFFECT_STYMIE = 494, - // EFFECT_NONE = 495, - EFFECT_INTERVENE = 496, - EFFECT_SOUL_ENSLAVEMENT = 497, - EFFECT_UNLEASH = 498, - EFFECT_CLARION_CALL = 499, - EFFECT_OVERKILL = 500, - EFFECT_YAEGASUMI = 501, - EFFECT_MIKAGE = 502, - EFFECT_FLY_HIGH = 503, - EFFECT_ASTRAL_CONDUIT = 504, - EFFECT_UNBRIDLED_WISDOM = 505, - // EFFECT_NONE = 506, - EFFECT_GRAND_PAS = 507, - EFFECT_WIDENED_COMPASS = 508, - EFFECT_ODYLLIC_SUBTERFUGE = 509, - EFFECT_ERGON_MIGHT = 510, - EFFECT_REIVE_MARK = 511, - EFFECT_IONIS = 512, - EFFECT_BOLSTER = 513, - // EFFECT_NONE = 514, - EFFECT_LASTING_EMANATION = 515, - EFFECT_ECLIPTIC_ATTRITION = 516, - EFFECT_COLLIMATED_FERVOR = 517, - EFFECT_DEMATERIALIZE = 518, - EFFECT_THEURGIC_FOCUS = 519, - // EFFECT_NONE = 520, - // EFFECT_NONE = 521, - EFFECT_ELEMENTAL_SFORZO = 522, - EFFECT_IGNIS = 523, - EFFECT_GELUS = 524, - EFFECT_FLABRA = 525, - EFFECT_TELLUS = 526, - EFFECT_SULPOR = 527, - EFFECT_UNDA = 528, - EFFECT_LUX = 529, - EFFECT_TENEBRAE = 530, - EFFECT_VALLATION = 531, - EFFECT_SWORDPLAY = 532, - EFFECT_PFLUG = 533, - EFFECT_EMBOLDEN = 534, - EFFECT_VALIANCE = 535, - EFFECT_GAMBIT = 536, - EFFECT_LIEMENT = 537, - EFFECT_ONE_FOR_ALL = 538, - EFFECT_GEO_REGEN = 539, - EFFECT_GEO_POISON = 540, - EFFECT_GEO_REFRESH = 541, - EFFECT_GEO_STR_BOOST = 542, - EFFECT_GEO_DEX_BOOST = 543, - EFFECT_GEO_VIT_BOOST = 544, - EFFECT_GEO_AGI_BOOST = 545, - EFFECT_GEO_INT_BOOST = 546, - EFFECT_GEO_MND_BOOST = 547, - EFFECT_GEO_CHR_BOOST = 548, - EFFECT_GEO_ATTACK_BOOST = 549, - EFFECT_GEO_DEFENSE_BOOST = 550, - EFFECT_GEO_MAGIC_ATK_BOOST = 551, - EFFECT_GEO_MAGIC_DEF_BOOST = 552, - EFFECT_GEO_ACCURACY_BOOST = 553, - EFFECT_GEO_EVASION_BOOST = 554, - EFFECT_GEO_MAGIC_ACC_BOOST = 555, - EFFECT_GEO_MAGIC_EVASION_BOOST = 556, - EFFECT_GEO_ATTACK_DOWN = 557, - EFFECT_GEO_DEFENSE_DOWN = 558, - EFFECT_GEO_MAGIC_ATK_DOWN = 559, - EFFECT_GEO_MAGIC_DEF_DOWN = 560, - EFFECT_GEO_ACCURACY_DOWN = 561, - EFFECT_GEO_EVASION_DOWN = 562, - EFFECT_GEO_MAGIC_ACC_DOWN = 563, - EFFECT_GEO_MAGIC_EVASION_DOWN = 564, - EFFECT_GEO_SLOW = 565, - EFFECT_GEO_PARALYSIS = 566, - EFFECT_GEO_WEIGHT = 567, - EFFECT_FOIL = 568, - EFFECT_BLAZE_OF_GLORY = 569, - EFFECT_BATTUTA = 570, - EFFECT_RAYKE = 571, - EFFECT_AVOIDANCE_DOWN = 572, - EFFECT_DELUGE_SPIKES = 573, - EFFECT_FAST_CAST = 574, - EFFECT_GESTATION = 575, - EFFECT_DOUBT = 576, // Bully: Intimidation Enfeeble status - EFFECT_CAIT_SITHS_FAVOR = 577, - EFFECT_FISHY_INTUITION = 578, - EFFECT_COMMITMENT = 579, - EFFECT_GEO_HASTE = 580, - EFFECT_FLURRY_II = 581, - EFFECT_CONTRADANCE = 582, - EFFECT_APOGEE = 583, - EFFECT_ENTRUST = 584, - EFFECT_COSTUME_II = 585, - EFFECT_CURING_CONDUIT = 586, - EFFECT_TP_BONUS = 587, - EFFECT_FINISHING_MOVE_6 = 588, - EFFECT_FIRESTORM_II = 589, - EFFECT_HAILSTORM_II = 590, - EFFECT_WINDSTORM_II = 591, - EFFECT_SANDSTORM_II = 592, - EFFECT_THUNDERSTORM_II = 593, - EFFECT_RAINSTORM_II = 594, - EFFECT_AURORASTORM_II = 595, - EFFECT_VOIDSTORM_II = 596, - EFFECT_INUNDATION = 597, - EFFECT_CASCADE = 598, - EFFECT_CONSUME_MANA = 599, - EFFECT_RUNEISTS_ROLL = 600, - EFFECT_CROOKED_CARDS = 601, - EFFECT_VORSEAL = 602, - EFFECT_ELVORSEAL = 603, - EFFECT_MIGHTY_GUARD = 604, - EFFECT_GALE_SPIKES = 605, - EFFECT_CLOD_SPIKES = 606, - EFFECT_GLINT_SPIKES = 607, - EFFECT_NEGATE_VIRUS = 608, - EFFECT_NEGATE_CURSE = 609, - EFFECT_NEGATE_CHARM = 610, - EFFECT_MAGIC_EVASION_BOOST = 611, - EFFECT_COLURE_ACTIVE = 612, - EFFECT_MUMORS_RADIANCE = 613, - EFFECT_ULLEGORES_GLOOM = 614, - EFFECT_BOOST_II = 615, - EFFECT_ARTISANAL_KNOWLEDGE = 616, - EFFECT_SACRIFICE = 617, - EFFECT_EMPOROXS_GIFT = 618, - EFFECT_SPIRIT_BOND = 619, - EFFECT_AWAKEN = 620, - EFFECT_MAJESTY = 621, - EFFECT_GUARDING_RATE_BOOST = 622, - EFFECT_RAMPART = 623, - EFFECT_WINDS_BLESSING = 624, - EFFECT_SIRENS_FAVOR = 625, - EFFECT_NEGATE_SLEEP = 626, - EFFECT_MOBILIZATION = 627, - EFFECT_HOVER_SHOT = 628, - EFFECT_MOOGLE_AMPLIFIER = 629, - EFFECT_TAINT = 630, - EFFECT_HAUNT = 631, - EFFECT_BLACK_SANCTUS = 632, - EFFECT_ANIMATED = 633, +#include "data/enums/status_effect.h" +#include "data/enums/status_effect_flag.h" - // Effect icons in packet can go from 0-767, so no custom effects should go in that range. - - // Purchased from Cruor Prospector - EFFECT_ABYSSEA_STR = 768, - EFFECT_ABYSSEA_DEX = 769, - EFFECT_ABYSSEA_VIT = 770, - EFFECT_ABYSSEA_AGI = 771, - EFFECT_ABYSSEA_INT = 772, - EFFECT_ABYSSEA_MND = 773, - EFFECT_ABYSSEA_CHR = 774, - EFFECT_ABYSSEA_HP = 775, - EFFECT_ABYSSEA_MP = 776, - - // *Prowess increases not currently retail accurate. - // GoV Prowess bonus effects, real effect at ID 474 - EFFECT_PROWESS_CASKET_RATE = 777, // (Unimplemented) - EFFECT_PROWESS_SKILL_RATE = 778, // (Unimplemented) - EFFECT_PROWESS_CRYSTAL_YIELD = 779, // (Unimplemented) - EFFECT_PROWESS_TH = 780, // +1 per tier - EFFECT_PROWESS_ATTACK_SPEED = 781, // *flat 4% for now - EFFECT_PROWESS_HP_MP = 782, // Base 3% and another 1% per tier. - EFFECT_PROWESS_ACC_RACC = 783, // *flat 4% for now - EFFECT_PROWESS_ATT_RATT = 784, // *flat 4% for now - EFFECT_PROWESS_MACC_MATK = 785, // *flat 4% for now - EFFECT_PROWESS_CURE_POTENCY = 786, // *flat 4% for now - EFFECT_PROWESS_WS_DMG = 787, // (Unimplemented) 2% per tier. - EFFECT_PROWESS_KILLER = 788, // *flat +4 for now - // End GoV Prowess fakery - - EFFECT_MARK_OF_SEED = 790, // Tracks 30 min timer in ACP mission "Those Who Lurk in Shadows (II)" - EFFECT_ALL_MISS = 791, // All attacks miss (ie - Tiamat while flying) - EFFECT_SUPER_BUFF = 792, // Boss buff (ie - Nidhogg "2hour") - EFFECT_NINJUTSU_ELE_DEBUFF = 793, - EFFECT_HEALING = 794, - EFFECT_LEAVEGAME = 795, - EFFECT_HASTE_SAMBA_HASTE = 796, // Small JA Haste given by Haste Samba on hit - EFFECT_TELEPORT = 797, - EFFECT_CHAINBOUND = 798, - EFFECT_SKILLCHAIN = 799, - EFFECT_DYNAMIS = 800, - EFFECT_MEDITATE = 801, // Dummy effect for SAM Meditate JA - EFFECT_ELEMENTALRES_DOWN = 802, // Elemental resistance down - EFFECT_FULL_SPEED_AHEAD = 803, // Used to track Full Speed Ahead quest minigame - EFFECT_HYSTERIA = 804, // Used for Hysteroanima to stop after readying a weaponskill with no msg. - EFFECT_TOMAHAWK = 805, // Silent status effect inflicted by a Warrior using the "Tomahawk" job ability - EFFECT_NUKE_WALL = 806, // Custom effect for NM type mobs only. Applied by elemental magic damage sources - - // TRUST Aura Effects - EFFECT_TRUST_AURA_CHR = 807, // CHR Aura, + 9.7 % Defense Bonus, + 5 Magic Defense Bonus and +5 CHR at lv.99, stacks with player Indi / Geo CHR. - EFFECT_TRUST_AURA_HASTE = 808, // HASTE Aura, Haste + 20 %, Accuracy + 30, Ranged Accuracy + 30 and Magic Accuracy + 30 at lvl 99, stacks with player Indi / Geo HASTE. - EFFECT_TRUST_AURA_EXP = 809, // EXP Aura, +20% dedication effect for Experience Points and Capacity Points, stacks with other forms of dedication. - EFFECT_TRUST_AURA_ACC = 810, // ACC Aura, Accuracy + 24, Ranged accuracy + 24, and DEX + 5 at lvl 99, stacks with player Indi / Geo PRECISION. - EFFECT_TRUST_AURA_REFRESH = 811, // REFRESH Aura, 3 MP / tick at lvl 99 stacks with player Indi / Geo REFRESH, also grants an increase to magical skill gain rate. - EFFECT_TRUST_AURA_REGEN = 812, // REGEN Aura, 6 HP / tick at lvl 99 stacks with player Indi / Geo REGEN.also grants an increase to physical combat skill gain rate. - EFFECT_TRUST_AURA_MAGIC_ATTACK = 813, // MATT Aura, Magic Attack Boost + 19 and +19 Magic Accuracy boost at lvl 99, stacks with player Indi / Geo ACUMEN. - // End of Trust Aura Effects - - // 789 - // 813-1022 - // EFFECT_PLACEHOLDER = 1023 // The client dat file seems to have only this many "slots", results of exceeding that are untested. -}; #define MAX_EFFECTID 814 // 768 real + 46 custom -DECLARE_FORMAT_AS_UNDERLYING(EFFECT); /************************************************************************ * * * Unsolved problems: * * * - * - saving the ID of the entity that added the effect * * - updating the effect (e.g., rewriting Protect I to Protect II) * * * ************************************************************************/ @@ -793,7 +56,7 @@ enum EffectSourceType : uint8_t class CStatusEffect { public: - EFFECT GetStatusID(); + auto GetStatusID() -> xi::StatusEffect; uint32 GetSubID() const; auto GetSourceType() const -> uint16; auto GetSourceTypeParam() const -> uint32; @@ -803,7 +66,7 @@ class CStatusEffect uint16 GetSubPower() const; uint16 GetSubIcon() const; uint16 GetTier() const; - uint32 GetEffectFlags() const; + auto GetEffectFlags() const -> xi::StatusEffectFlag; uint16 GetEffectType() const; uint8 GetEffectSlot() const; @@ -813,10 +76,10 @@ class CStatusEffect timer::time_point GetStartTime(); CBattleEntity* GetOwner(); - void SetEffectFlags(uint32 Flags); - void AddEffectFlag(uint32 Flag); - void DelEffectFlag(uint32 Flag); - bool HasEffectFlag(uint32 Flag); + void SetEffectFlags(xi::StatusEffectFlag Flags); + void AddEffectFlag(xi::StatusEffectFlag Flag); + void DelEffectFlag(xi::StatusEffectFlag Flag); + auto HasEffectFlag(xi::StatusEffectFlag Flag) -> bool; void SetEffectType(uint16 Type); void SetEffectSlot(uint8 Slot); void SetIcon(uint16 Icon); @@ -843,26 +106,26 @@ class CStatusEffect std::vector modList; // List of modifiers bool deleted{ false }; - CStatusEffect(EFFECT id, uint16 icon, uint16 power, timer::duration tick, timer::duration duration, uint32 subid = 0, uint16 subPower = 0, uint16 subIcon = 0, uint16 tier = 0, uint32 flags = 0, uint16 sourceType = EffectSourceType::SOURCE_NONE, uint32 sourceTypeParam = 0, uint32 originID = 0); + CStatusEffect(xi::StatusEffect id, uint16 icon, uint16 power, timer::duration tick, timer::duration duration, uint32 subid = 0, uint16 subPower = 0, uint16 subIcon = 0, uint16 tier = 0, xi::StatusEffectFlag flags = xi::StatusEffectFlag::None, uint16 sourceType = EffectSourceType::SOURCE_NONE, uint32 sourceTypeParam = 0, uint32 originID = 0); ~CStatusEffect(); private: CBattleEntity* m_POwner{ nullptr }; - EFFECT m_StatusID{ EFFECT_NONE }; // Main effect type - uint32 m_SubID{ 0 }; // Additional effect type - uint16 m_Icon{ 0 }; // Effect icon - uint16 m_Power{ 0 }; // Strength of effect - uint16 m_SubPower{ 0 }; // Secondary power of the effect - uint16 m_SubIcon{ 0 }; // Secondary icon for the sub effect (used for things like setting an Aura sub effect icon) - uint16 m_Tier{ 0 }; // Tier of the effect - uint32 m_Flags{ 0 }; // Effect flags (conditions for its disappearance) - uint32 m_OriginID{ 0 }; // The effect's origin ID. (This is usually the ID of the entity that created the effect) - uint16 m_SourceType{ 0 }; // The effect's source type - uint32 m_SourceTypeParam{ 0 }; // The effect's source ID - uint16 m_Type{ 0 }; // Used to enforce only one - uint8 m_Slot{ 0 }; // Used to determine slot order for songs/rolls + xi::StatusEffect m_StatusID{ xi::StatusEffect::None }; // Main effect type + uint32 m_SubID{ 0 }; // Additional effect type + uint16 m_Icon{ 0 }; // Effect icon + uint16 m_Power{ 0 }; // Strength of effect + uint16 m_SubPower{ 0 }; // Secondary power of the effect + uint16 m_SubIcon{ 0 }; // Secondary icon for the sub effect (used for things like setting an Aura sub effect icon) + uint16 m_Tier{ 0 }; // Tier of the effect + xi::StatusEffectFlag m_Flags{ xi::StatusEffectFlag::None }; // Effect flags (conditions for its disappearance) + uint32 m_OriginID{ 0 }; // The effect's origin ID. (This is usually the ID of the entity that created the effect) + uint16 m_SourceType{ 0 }; // The effect's source type + uint32 m_SourceTypeParam{ 0 }; // The effect's source ID + uint16 m_Type{ 0 }; // Used to enforce only one + uint8 m_Slot{ 0 }; // Used to determine slot order for songs/rolls timer::duration m_TickTime{ 0ms }; // Effect repetition time timer::duration m_Duration{ 0ms }; // Duration of effect diff --git a/src/map/status_effect_container.cpp b/src/map/status_effect_container.cpp index b957603f379..6840a46eb98 100644 --- a/src/map/status_effect_container.cpp +++ b/src/map/status_effect_container.cpp @@ -67,17 +67,17 @@ namespace effects // Default effect of statuses are overwrite if equal or higher struct EffectParams_t { - uint32 Flag{ 0 }; - std::string Name{}; - uint16 Type{ 0 }; // type will erase all other effects that match. Examples: En- spells, Spikes. - EFFECT NegativeId{ 0 }; // Negative means the new effect can only land if the negative id is weaker. Example: Haste, Slow - EFFECTOVERWRITE Overwrite{ EFFECTOVERWRITE::EQUAL_HIGHER }; // only overwrite its self if the new effect is equal or higher / higher than current. Example: Protect, Blind - EFFECT BlockId{ 0 }; // If this status effect is on the user, it will not take effect. Example: lullaby will not take effect with sleep I - EFFECT RemoveId{ 0 }; // Will always remove this effect when landing - uint8 Element{ 0 }; // status effect element, used in resistances - timer::duration MinDuration{ 0s }; // minimum duration. IE: stun cannot last less than 1 second - uint16 SortKey{ 0 }; // Order in which the status effect should be displayed for the player - MsgStd WearOffMessageId{ MsgStd::EffectWearsOff }; // Message ID for when effect wears off + xi::StatusEffectFlag Flag{ xi::StatusEffectFlag::None }; + std::string Name{}; + uint16 Type{ 0 }; // type will erase all other effects that match. Examples: En- spells, Spikes. + xi::StatusEffect NegativeId{ 0 }; // Negative means the new effect can only land if the negative id is weaker. Example: Haste, Slow + xi::EffectOverwrite Overwrite{ xi::EffectOverwrite::EqualHigher }; // only overwrite its self if the new effect is equal or higher / higher than current. Example: Protect, Blind + xi::StatusEffect BlockId{ 0 }; // If this status effect is on the user, it will not take effect. Example: lullaby will not take effect with sleep I + xi::StatusEffect RemoveId{ 0 }; // Will always remove this effect when landing + uint8 Element{ 0 }; // status effect element, used in resistances + timer::duration MinDuration{ 0s }; // minimum duration. IE: stun cannot last less than 1 second + uint16 SortKey{ 0 }; // Order in which the status effect should be displayed for the player + MsgStd WearOffMessageId{ MsgStd::EffectWearsOff }; // Message ID for when effect wears off }; std::array EffectsParams; @@ -86,7 +86,7 @@ void LoadEffectsParameters() { for (uint16 i = 0; i < MAX_EFFECTID; ++i) { - EffectsParams[i].Flag = 0; + EffectsParams[static_cast(i)].Flag = xi::StatusEffectFlag::None; } for (const auto& [id, data] : LoadStatusEffects()) @@ -96,19 +96,19 @@ void LoadEffectsParameters() continue; } - EffectsParams[id].Name = data.Name; - EffectsParams[id].Flag = static_cast(data.Flags); - EffectsParams[id].Type = static_cast(data.ExclusionGroup); - EffectsParams[id].NegativeId = static_cast(data.Negative); - EffectsParams[id].Overwrite = static_cast(data.Overwrite); - EffectsParams[id].BlockId = static_cast(data.Block); - EffectsParams[id].RemoveId = static_cast(data.Remove); - EffectsParams[id].Element = static_cast(data.Element); - EffectsParams[id].MinDuration = std::chrono::seconds(data.MinDuration); - EffectsParams[id].SortKey = data.SortKey == 0 ? 10000 : data.SortKey; - EffectsParams[id].WearOffMessageId = data.WearOffMessageId == 0 ? MsgStd::EffectWearsOff : static_cast(data.WearOffMessageId); + EffectsParams[static_cast(id)].Name = data.Name; + EffectsParams[static_cast(id)].Flag = data.Flags; + EffectsParams[static_cast(id)].Type = static_cast(data.ExclusionGroup); + EffectsParams[static_cast(id)].NegativeId = static_cast(data.Negative); + EffectsParams[static_cast(id)].Overwrite = data.Overwrite; + EffectsParams[static_cast(id)].BlockId = static_cast(data.Block); + EffectsParams[static_cast(id)].RemoveId = static_cast(data.Remove); + EffectsParams[static_cast(id)].Element = static_cast(data.Element); + EffectsParams[static_cast(id)].MinDuration = std::chrono::seconds(data.MinDuration); + EffectsParams[static_cast(id)].SortKey = data.SortKey == 0 ? 10000 : data.SortKey; + EffectsParams[static_cast(id)].WearOffMessageId = data.WearOffMessageId == 0 ? MsgStd::EffectWearsOff : static_cast(data.WearOffMessageId); - auto filename = fmt::format("./scripts/effects/{}.lua", EffectsParams[id].Name); + auto filename = fmt::format("./scripts/effects/{}.lua", EffectsParams[static_cast(id)].Name); luautils::CacheLuaObjectFromFile(filename); } } @@ -116,26 +116,26 @@ void LoadEffectsParameters() // hacky way to get element from status effect uint16 GetEffectElement(uint16 effect) { - return EffectsParams[effect].Element; + return EffectsParams[static_cast(effect)].Element; } std::string GetEffectName(uint16 effect) { - return EffectsParams[effect].Name; + return EffectsParams[static_cast(effect)].Name; } } // namespace effects bool isSortedByStartTime(uint16 effectId) { - return effectId >= EFFECT_FIRE_MANEUVER && effectId <= EFFECT_DARK_MANEUVER; + return static_cast(effectId) >= static_cast(xi::StatusEffect::FireManeuver) && static_cast(effectId) <= static_cast(xi::StatusEffect::DarkManeuver); } bool statusOrdering(CStatusEffect* AStatus, CStatusEffect* BStatus) { // Sort by overall status effect ordering, if they have different sort keys - uint16 ASortKey = effects::EffectsParams[AStatus->GetStatusID()].SortKey; - uint16 BSortKey = effects::EffectsParams[BStatus->GetStatusID()].SortKey; + uint16 ASortKey = effects::EffectsParams[static_cast(AStatus->GetStatusID())].SortKey; + uint16 BSortKey = effects::EffectsParams[static_cast(BStatus->GetStatusID())].SortKey; if (ASortKey != BSortKey) { return ASortKey < BSortKey; @@ -148,7 +148,7 @@ bool statusOrdering(CStatusEffect* AStatus, CStatusEffect* BStatus) } // Sort by start time - if (isSortedByStartTime(AStatus->GetStatusID()) && isSortedByStartTime(BStatus->GetStatusID())) + if (isSortedByStartTime(static_cast(AStatus->GetStatusID())) && isSortedByStartTime(static_cast(BStatus->GetStatusID()))) { auto diff = timer::count_milliseconds(AStatus->GetStartTime() - BStatus->GetStartTime()); if (diff != 0) @@ -183,7 +183,7 @@ CStatusEffectContainer::~CStatusEffectContainer() } } -uint8 CStatusEffectContainer::GetEffectsCount(EFFECT ID) +auto CStatusEffectContainer::GetEffectsCount(xi::StatusEffect ID) -> uint8 { uint8 count = 0; @@ -197,7 +197,7 @@ uint8 CStatusEffectContainer::GetEffectsCount(EFFECT ID) return count; } -uint8 CStatusEffectContainer::GetEffectsCountWithFlag(EFFECTFLAG flag) +auto CStatusEffectContainer::GetEffectsCountWithFlag(xi::StatusEffectFlag flag) -> uint8 { uint8 count = 0; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -232,13 +232,13 @@ uint8 CStatusEffectContainer::GetLowestFreeSlot() bool CStatusEffectContainer::CanGainStatusEffect(CStatusEffect* PStatusEffect) { - EFFECT statusEffect = PStatusEffect->GetStatusID(); + xi::StatusEffect statusEffect = PStatusEffect->GetStatusID(); // check for immunities first switch (statusEffect) { - case EFFECT_SLEEP: - case EFFECT_SLEEP_II: - case EFFECT_LULLABY: + case xi::StatusEffect::SleepI: + case xi::StatusEffect::SleepIi: + case xi::StatusEffect::Lullaby: { uint16 subPower = PStatusEffect->GetSubPower(); if (subPower == ELEMENT_LIGHT && m_POwner->hasImmunity(IMMUNITY_LIGHT_SLEEP)) @@ -252,90 +252,90 @@ bool CStatusEffectContainer::CanGainStatusEffect(CStatusEffect* PStatusEffect) break; } - case EFFECT_WEIGHT: + case xi::StatusEffect::Weight: if (m_POwner->hasImmunity(IMMUNITY_GRAVITY)) { return false; } break; - case EFFECT_BIND: + case xi::StatusEffect::Bind: if (m_POwner->hasImmunity(IMMUNITY_BIND)) { return false; } break; - case EFFECT_STUN: + case xi::StatusEffect::Stun: if (m_POwner->hasImmunity(IMMUNITY_STUN)) { return false; } break; - case EFFECT_SILENCE: + case xi::StatusEffect::Silence: if (m_POwner->hasImmunity(IMMUNITY_SILENCE)) { return false; } break; - case EFFECT_PARALYSIS: + case xi::StatusEffect::Paralysis: if (m_POwner->hasImmunity(IMMUNITY_PARALYZE)) { return false; } break; - case EFFECT_BLINDNESS: + case xi::StatusEffect::Blindness: if (m_POwner->hasImmunity(IMMUNITY_BLIND)) { return false; } break; - case EFFECT_SLOW: + case xi::StatusEffect::Slow: if (m_POwner->hasImmunity(IMMUNITY_SLOW)) { return false; } break; - case EFFECT_POISON: + case xi::StatusEffect::Poison: if (m_POwner->hasImmunity(IMMUNITY_POISON)) { return false; } break; - case EFFECT_ELEGY: + case xi::StatusEffect::Elegy: if (m_POwner->hasImmunity(IMMUNITY_ELEGY)) { return false; } break; - case EFFECT_REQUIEM: + case xi::StatusEffect::Requiem: if (m_POwner->hasImmunity(IMMUNITY_REQUIEM)) { return false; } break; - case EFFECT_TERROR: + case xi::StatusEffect::Terror: if (m_POwner->hasImmunity(IMMUNITY_TERROR)) { return false; } break; - case EFFECT_PETRIFICATION: + case xi::StatusEffect::Petrification: if (m_POwner->hasImmunity(IMMUNITY_PETRIFY)) { return false; } break; - case EFFECT_BLAZE_SPIKES: - case EFFECT_ICE_SPIKES: - case EFFECT_SHOCK_SPIKES: - case EFFECT_REPRISAL: - case EFFECT_DELUGE_SPIKES: - case EFFECT_GALE_SPIKES: - case EFFECT_GLINT_SPIKES: - case EFFECT_DAMAGE_SPIKES: - case EFFECT_DREAD_SPIKES: - case EFFECT_CLOD_SPIKES: - { - const auto PAftermath = this->GetStatusEffect(EFFECT_AFTERMATH); + case xi::StatusEffect::BlazeSpikes: + case xi::StatusEffect::IceSpikes: + case xi::StatusEffect::ShockSpikes: + case xi::StatusEffect::Reprisal: + case xi::StatusEffect::DelugeSpikes: + case xi::StatusEffect::GaleSpikes: + case xi::StatusEffect::GlintSpikes: + case xi::StatusEffect::DamageSpikes: + case xi::StatusEffect::DreadSpikes: + case xi::StatusEffect::ClodSpikes: + { + const auto PAftermath = this->GetStatusEffect(xi::StatusEffect::Aftermath); // Geirskogul aftermath edge case if (PAftermath && (PAftermath->GetPower() == 8 || PAftermath->GetPower() == 22)) { @@ -348,27 +348,27 @@ bool CStatusEffectContainer::CanGainStatusEffect(CStatusEffect* PStatusEffect) } // make sure pets can't be charmed - if ((statusEffect == EFFECT_CHARM || statusEffect == EFFECT_CHARM_II) && m_POwner->PMaster != nullptr) + if ((statusEffect == xi::StatusEffect::CharmI || statusEffect == xi::StatusEffect::CharmIi) && m_POwner->PMaster != nullptr) { return false; } // check if a status effect blocks this - EFFECT blockId = effects::EffectsParams[statusEffect].BlockId; - if (blockId != 0 && HasStatusEffect(blockId)) + xi::StatusEffect blockId = effects::EffectsParams[static_cast(statusEffect)].BlockId; + if (static_cast(blockId) != 0 && HasStatusEffect(blockId)) { return false; } // check if negative is strong enough to stop this - EFFECT negativeId = effects::EffectsParams[statusEffect].NegativeId; - if (negativeId != 0) + xi::StatusEffect negativeId = effects::EffectsParams[static_cast(statusEffect)].NegativeId; + if (static_cast(negativeId) != 0) { CStatusEffect* negativeEffect = GetStatusEffect(negativeId); if (negativeEffect != nullptr) { - if (statusEffect == EFFECT_HASTE && negativeEffect->GetStatusID() == EFFECT_SLOW && negativeEffect->GetSubPower() == 1) + if (statusEffect == xi::StatusEffect::Haste && negativeEffect->GetStatusID() == xi::StatusEffect::Slow && negativeEffect->GetSubPower() == 1) { // slow i remote return true; @@ -389,17 +389,17 @@ bool CStatusEffectContainer::CanGainStatusEffect(CStatusEffect* PStatusEffect) // check overwrite if (existingEffect != nullptr) { - EFFECTOVERWRITE overwrite = effects::EffectsParams[statusEffect].Overwrite; + auto overwrite = effects::EffectsParams[static_cast(statusEffect)].Overwrite; - if (overwrite == EFFECTOVERWRITE::ALWAYS || overwrite == EFFECTOVERWRITE::IGNORE_DUPLICATE) + if (overwrite == xi::EffectOverwrite::Always || overwrite == xi::EffectOverwrite::IgnoreDuplicate) { return true; } - else if (overwrite == EFFECTOVERWRITE::NEVER) + else if (overwrite == xi::EffectOverwrite::Never) { return false; } - else if (overwrite == EFFECTOVERWRITE::EQUAL_HIGHER) + else if (overwrite == xi::EffectOverwrite::EqualHigher) { if (PStatusEffect->GetTier() != 0 && existingEffect->GetTier() != 0) { @@ -407,7 +407,7 @@ bool CStatusEffectContainer::CanGainStatusEffect(CStatusEffect* PStatusEffect) } return PStatusEffect->GetPower() >= existingEffect->GetPower(); } - else if (overwrite == EFFECTOVERWRITE::HIGHER) + else if (overwrite == xi::EffectOverwrite::Higher) { if (PStatusEffect->GetTier() != 0 && existingEffect->GetTier() != 0) { @@ -415,7 +415,7 @@ bool CStatusEffectContainer::CanGainStatusEffect(CStatusEffect* PStatusEffect) } return PStatusEffect->GetPower() > existingEffect->GetPower(); } - else if (overwrite == EFFECTOVERWRITE::TIER_HIGHER) + else if (overwrite == xi::EffectOverwrite::TierHigher) { if (PStatusEffect->GetTier() != 0 && existingEffect->GetTier() != 0) { @@ -431,24 +431,24 @@ bool CStatusEffectContainer::CanGainStatusEffect(CStatusEffect* PStatusEffect) void CStatusEffectContainer::OverwriteStatusEffect(CStatusEffect* StatusEffect) { - uint16 statusEffect = (uint16)StatusEffect->GetStatusID(); + xi::StatusEffect statusEffect = StatusEffect->GetStatusID(); // remove effect - EFFECTOVERWRITE overwrite = effects::EffectsParams[statusEffect].Overwrite; - if (overwrite != EFFECTOVERWRITE::IGNORE_DUPLICATE) + xi::EffectOverwrite overwrite = effects::EffectsParams[static_cast(statusEffect)].Overwrite; + if (overwrite != xi::EffectOverwrite::IgnoreDuplicate) { - DelStatusEffectSilent((EFFECT)statusEffect); + DelStatusEffectSilent(statusEffect); } // remove effect by id - EFFECT removeId = effects::EffectsParams[statusEffect].RemoveId; - if (removeId > EFFECT_KO) + xi::StatusEffect removeId = effects::EffectsParams[static_cast(statusEffect)].RemoveId; + if (removeId > xi::StatusEffect::Ko) { DelStatusEffectSilent(removeId); } // remove negative effect - EFFECT negativeId = effects::EffectsParams[statusEffect].NegativeId; - if (negativeId > EFFECT_KO) + xi::StatusEffect negativeId = effects::EffectsParams[static_cast(statusEffect)].NegativeId; + if (negativeId > xi::StatusEffect::Ko) { DelStatusEffectSilent(negativeId); } @@ -469,7 +469,7 @@ bool CStatusEffectContainer::AddStatusEffect(CStatusEffect* PStatusEffect, Effec return false; } - uint16 statusId = PStatusEffect->GetStatusID(); + uint16 statusId = static_cast(PStatusEffect->GetStatusID()); if (statusId >= MAX_EFFECTID) { @@ -480,9 +480,9 @@ bool CStatusEffectContainer::AddStatusEffect(CStatusEffect* PStatusEffect, Effec if (CanGainStatusEffect(PStatusEffect)) { // check for minimum duration - if (PStatusEffect->GetDuration() < effects::EffectsParams[statusId].MinDuration) + if (PStatusEffect->GetDuration() < effects::EffectsParams[static_cast(statusId)].MinDuration) { - PStatusEffect->SetDuration(effects::EffectsParams[statusId].MinDuration); + PStatusEffect->SetDuration(effects::EffectsParams[static_cast(statusId)].MinDuration); } // remove clean up other effects @@ -507,7 +507,7 @@ bool CStatusEffectContainer::AddStatusEffect(CStatusEffect* PStatusEffect, Effec m_POwner->addModifiers(&PStatusEffect->modList); - if (PStatusEffect->GetStatusID() >= EFFECT_FIRE_MANEUVER && PStatusEffect->GetStatusID() <= EFFECT_DARK_MANEUVER && m_POwner->objtype == TYPE_PC) + if (PStatusEffect->GetStatusID() >= xi::StatusEffect::FireManeuver && PStatusEffect->GetStatusID() <= xi::StatusEffect::DarkManeuver && m_POwner->objtype == TYPE_PC) { puppetutils::CheckAttachmentsForManeuver((CCharEntity*)m_POwner, PStatusEffect->GetStatusID(), true); } @@ -613,10 +613,10 @@ void CStatusEffectContainer::RemoveStatusEffect(CStatusEffect* PStatusEffect, co { auto* PChar = static_cast(m_POwner); - if (notice != EffectNotice::Silent && PStatusEffect->GetIcon() != 0 && !(PStatusEffect->HasEffectFlag(EFFECTFLAG_NO_LOSS_MESSAGE))) + if (notice != EffectNotice::Silent && PStatusEffect->GetIcon() != 0 && !(PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::NoLossMessage))) { const auto effectId = PStatusEffect->GetStatusID(); - const auto messageId = effectId < MAX_EFFECTID ? effects::EffectsParams[effectId].WearOffMessageId : MsgStd::EffectWearsOff; + const auto messageId = static_cast(effectId) < MAX_EFFECTID ? effects::EffectsParams[static_cast(effectId)].WearOffMessageId : MsgStd::EffectWearsOff; // Notify owner that they lost their buff. PChar->pushPacket(PChar, PChar, PStatusEffect->GetIcon(), 0, messageId); @@ -633,17 +633,17 @@ void CStatusEffectContainer::RemoveStatusEffect(CStatusEffect* PStatusEffect, co } } - if (PStatusEffect->GetStatusID() >= EFFECT_FIRE_MANEUVER && PStatusEffect->GetStatusID() <= EFFECT_DARK_MANEUVER) + if (PStatusEffect->GetStatusID() >= xi::StatusEffect::FireManeuver && PStatusEffect->GetStatusID() <= xi::StatusEffect::DarkManeuver) { puppetutils::CheckAttachmentsForManeuver(static_cast(m_POwner), PStatusEffect->GetStatusID(), false); } } else { - if (notice != EffectNotice::Silent && PStatusEffect->GetIcon() != 0 && !(PStatusEffect->HasEffectFlag(EFFECTFLAG_NO_LOSS_MESSAGE)) && !m_POwner->isDead()) + if (notice != EffectNotice::Silent && PStatusEffect->GetIcon() != 0 && !(PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::NoLossMessage)) && !m_POwner->isDead()) { const auto effectId = PStatusEffect->GetStatusID(); - const auto messageId = effectId < MAX_EFFECTID ? effects::EffectsParams[effectId].WearOffMessageId : MsgStd::EffectWearsOff; + const auto messageId = static_cast(effectId) < MAX_EFFECTID ? effects::EffectsParams[static_cast(effectId)].WearOffMessageId : MsgStd::EffectWearsOff; // Notify origin entity if they are in the same zone, and we are in their spawn list. const auto originId = PStatusEffect->GetOriginID(); @@ -666,7 +666,7 @@ void CStatusEffectContainer::RemoveStatusEffect(CStatusEffect* PStatusEffect, co * * ************************************************************************/ -bool CStatusEffectContainer::DelStatusEffect(EFFECT StatusID) +auto CStatusEffectContainer::DelStatusEffect(xi::StatusEffect StatusID) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -679,7 +679,7 @@ bool CStatusEffectContainer::DelStatusEffect(EFFECT StatusID) return false; } -bool CStatusEffectContainer::DelStatusEffectSilent(EFFECT StatusID) +auto CStatusEffectContainer::DelStatusEffectSilent(xi::StatusEffect StatusID) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -692,7 +692,7 @@ bool CStatusEffectContainer::DelStatusEffectSilent(EFFECT StatusID) return false; } -bool CStatusEffectContainer::DelStatusEffect(EFFECT StatusID, uint16 SubID) +auto CStatusEffectContainer::DelStatusEffect(xi::StatusEffect StatusID, uint16 SubID) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -705,7 +705,7 @@ bool CStatusEffectContainer::DelStatusEffect(EFFECT StatusID, uint16 SubID) return false; } -bool CStatusEffectContainer::DelStatusEffectBySource(EFFECT StatusID, EffectSourceType sourceType, uint16 sourceTypeParam) +auto CStatusEffectContainer::DelStatusEffectBySource(xi::StatusEffect StatusID, EffectSourceType sourceType, uint16 sourceTypeParam) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -718,7 +718,7 @@ bool CStatusEffectContainer::DelStatusEffectBySource(EFFECT StatusID, EffectSour return false; } -bool CStatusEffectContainer::DelStatusEffectByTier(EFFECT StatusID, uint16 tier) +auto CStatusEffectContainer::DelStatusEffectByTier(xi::StatusEffect StatusID, uint16 tier) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -762,14 +762,14 @@ void CStatusEffectContainer::KillAllStatusEffect() // Apply any state alterations for the effect if applicable. void CStatusEffectContainer::ApplyStateAlteringEffects(CStatusEffect* StatusEffect) { - EFFECT effect = StatusEffect->GetStatusID(); + xi::StatusEffect effect = StatusEffect->GetStatusID(); if (m_POwner->isAlive()) { // this should actually go into a char charm AI if (m_POwner->objtype == TYPE_PC) { - if (effect == EFFECT_CHARM || effect == EFFECT_CHARM_II) + if (effect == xi::StatusEffect::CharmI || effect == xi::StatusEffect::CharmIi) { if (m_POwner->PPet != nullptr) { @@ -781,9 +781,9 @@ void CStatusEffectContainer::ApplyStateAlteringEffects(CStatusEffect* StatusEffe if (HasPreventActionEffect(false)) { // change icon of sleep II and lullaby. Apparently they don't stop player movement. - if (effect == EFFECT_SLEEP_II || effect == EFFECT_LULLABY) + if (effect == xi::StatusEffect::SleepIi || effect == xi::StatusEffect::Lullaby) { - StatusEffect->SetIcon(EFFECT_SLEEP); + StatusEffect->SetIcon(static_cast(xi::StatusEffect::SleepI)); } if (!m_POwner->PAI->IsCurrentState() && !m_POwner->PAI->IsCurrentState()) @@ -801,7 +801,7 @@ void CStatusEffectContainer::DelStatusEffectsByIcon(const uint16 BuffNo) if (PStatusEffect->GetIcon() == BuffNo) { // This covers all effects that client can remove. Function not used for anything the server removes. - if (!(PStatusEffect->HasEffectFlag(EFFECTFLAG_NO_CANCEL))) + if (!(PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::NoCancel))) { RemoveStatusEffect(PStatusEffect); } @@ -825,7 +825,7 @@ void CStatusEffectContainer::DelStatusEffectsByType(uint16 Type) } } -void CStatusEffectContainer::DelStatusEffectsByFlag(uint32 flag, EffectNotice notice) +void CStatusEffectContainer::DelStatusEffectsByFlag(xi::StatusEffectFlag flag, EffectNotice notice) { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -834,8 +834,8 @@ void CStatusEffectContainer::DelStatusEffectsByFlag(uint32 flag, EffectNotice no // If this is an NM/Mob Nightmare sleep, it can be removed explictly by a cure // see mobskills/nightmare.lua for full explanation if ( - flag & EFFECTFLAG_DAMAGE && - PStatusEffect->GetStatusID() == EFFECT_SLEEP && + (flag & xi::StatusEffectFlag::Damage) != xi::StatusEffectFlag::None && + PStatusEffect->GetStatusID() == xi::StatusEffect::SleepI && PStatusEffect->GetTier() >= 5) // Tier 5 = Diabolos NM Nightmare { continue; @@ -852,33 +852,33 @@ void CStatusEffectContainer::DelStatusEffectsByFlag(uint32 flag, EffectNotice no * * ************************************************************************/ -EFFECT CStatusEffectContainer::EraseStatusEffect() +auto CStatusEffectContainer::EraseStatusEffect() -> xi::StatusEffect { std::vector erasableList; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if (PStatusEffect->HasEffectFlag(EFFECTFLAG_ERASABLE) && PStatusEffect->GetDuration() > 0s && !PStatusEffect->deleted) + if (PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::Erasable) && PStatusEffect->GetDuration() > 0s && !PStatusEffect->deleted) { erasableList.emplace_back(PStatusEffect); } } if (!erasableList.empty()) { - auto rndIdx = xirand::GetRandomNumber(erasableList.size()); - EFFECT result = erasableList.at(rndIdx)->GetStatusID(); + auto rndIdx = xirand::GetRandomNumber(erasableList.size()); + xi::StatusEffect result = erasableList.at(rndIdx)->GetStatusID(); RemoveStatusEffect(erasableList.at(rndIdx)); return result; } - return EFFECT_NONE; + return xi::StatusEffect::None; } -EFFECT CStatusEffectContainer::HealingWaltz() +auto CStatusEffectContainer::HealingWaltz() -> xi::StatusEffect { std::vector waltzableList; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if ((PStatusEffect->HasEffectFlag(EFFECTFLAG_WALTZABLE) || - PStatusEffect->HasEffectFlag(EFFECTFLAG_ERASABLE)) && + if ((PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::Waltzable) || + PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::Erasable)) && PStatusEffect->GetDuration() > 0s && !PStatusEffect->deleted) { @@ -887,12 +887,12 @@ EFFECT CStatusEffectContainer::HealingWaltz() } if (!waltzableList.empty()) { - auto rndIdx = xirand::GetRandomNumber(waltzableList.size()); - EFFECT result = waltzableList.at(rndIdx)->GetStatusID(); + auto rndIdx = xirand::GetRandomNumber(waltzableList.size()); + xi::StatusEffect result = waltzableList.at(rndIdx)->GetStatusID(); RemoveStatusEffect(waltzableList.at(rndIdx)); return result; } - return EFFECT_NONE; + return xi::StatusEffect::None; } /* @@ -904,7 +904,7 @@ uint8 CStatusEffectContainer::EraseAllStatusEffect() uint8 count = 0; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if (PStatusEffect->HasEffectFlag(EFFECTFLAG_ERASABLE) && PStatusEffect->GetDuration() > 0s && !PStatusEffect->deleted) + if (PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::Erasable) && PStatusEffect->GetDuration() > 0s && !PStatusEffect->deleted) { RemoveStatusEffect(PStatusEffect); count++; @@ -919,7 +919,7 @@ uint8 CStatusEffectContainer::EraseAllStatusEffect() * * ************************************************************************/ -EFFECT CStatusEffectContainer::DispelStatusEffect(EFFECTFLAG flag) +auto CStatusEffectContainer::DispelStatusEffect(xi::StatusEffectFlag flag) -> xi::StatusEffect { std::vector dispelableList; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -931,19 +931,19 @@ EFFECT CStatusEffectContainer::DispelStatusEffect(EFFECTFLAG flag) } if (!dispelableList.empty()) { - auto rndIdx = xirand::GetRandomNumber(dispelableList.size()); - EFFECT result = dispelableList.at(rndIdx)->GetStatusID(); + auto rndIdx = xirand::GetRandomNumber(dispelableList.size()); + xi::StatusEffect result = dispelableList.at(rndIdx)->GetStatusID(); RemoveStatusEffect(dispelableList.at(rndIdx), EffectNotice::Silent); return result; } - return EFFECT_NONE; + return xi::StatusEffect::None; } /* Dispels all positive status effects returns number of dispelled effects */ -uint8 CStatusEffectContainer::DispelAllStatusEffect(EFFECTFLAG flag) +auto CStatusEffectContainer::DispelAllStatusEffect(xi::StatusEffectFlag flag) -> uint8 { uint8 count = 0; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -963,7 +963,7 @@ uint8 CStatusEffectContainer::DispelAllStatusEffect(EFFECTFLAG flag) * * ************************************************************************/ -bool CStatusEffectContainer::HasStatusEffect(EFFECT StatusID) +auto CStatusEffectContainer::HasStatusEffect(xi::StatusEffect StatusID) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -975,7 +975,7 @@ bool CStatusEffectContainer::HasStatusEffect(EFFECT StatusID) return false; } -bool CStatusEffectContainer::HasStatusEffectByFlag(uint32 flag) +auto CStatusEffectContainer::HasStatusEffectByFlag(xi::StatusEffectFlag flag) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -998,7 +998,7 @@ bool CStatusEffectContainer::ApplyBardEffect(CStatusEffect* PStatusEffect, uint8 { // if all match tier/id/effect then overwrite - // if tier/effect match then overwrite //but id doesn't, NO EFFECT + // if tier/effect match then overwrite //but id doesn't, NO xi::StatusEffect // if targ has <2 of your songs on, then just apply // if targ has 2 of your songs, remove oldest one and apply this one. @@ -1006,7 +1006,7 @@ bool CStatusEffectContainer::ApplyBardEffect(CStatusEffect* PStatusEffect, uint8 CStatusEffect* oldestSong = nullptr; for (CStatusEffect* ExistingStatusEffect : m_StatusEffectSet) { - if (ExistingStatusEffect->GetStatusID() >= EFFECT_REQUIEM && ExistingStatusEffect->GetStatusID() <= EFFECT_NOCTURNE) // is an active brd effect + if (ExistingStatusEffect->GetStatusID() >= xi::StatusEffect::Requiem && ExistingStatusEffect->GetStatusID() <= xi::StatusEffect::Nocturne) // is an active brd effect { if (ExistingStatusEffect->GetTier() == PStatusEffect->GetTier() && ExistingStatusEffect->GetStatusID() == PStatusEffect->GetStatusID()) { // same tier/type, overwrite @@ -1055,8 +1055,8 @@ bool CStatusEffectContainer::ApplyBardEffect(CStatusEffect* PStatusEffect, uint8 auto CStatusEffectContainer::ApplyCorsairEffect(CStatusEffect* PStatusEffect, uint8 maxRolls, uint8 bustDuration) -> bool { // Don't process if not a COR roll. - if (!((PStatusEffect->GetStatusID() >= EFFECT_FIGHTERS_ROLL && PStatusEffect->GetStatusID() <= EFFECT_NATURALISTS_ROLL) || - (PStatusEffect->GetStatusID() == EFFECT_RUNEISTS_ROLL))) + if (!((PStatusEffect->GetStatusID() >= xi::StatusEffect::FightersRoll && PStatusEffect->GetStatusID() <= xi::StatusEffect::NaturalistsRoll) || + (PStatusEffect->GetStatusID() == xi::StatusEffect::RuneistsRoll))) { return false; } @@ -1068,7 +1068,7 @@ auto CStatusEffectContainer::ApplyCorsairEffect(CStatusEffect* PStatusEffect, ui // if all match roll #/id/effect then overwrite. - // If roll #/ effect match then overwrite, but id doesn't, NO EFFECT + // If roll #/ effect match then overwrite, but id doesn't, NO xi::StatusEffect // If targ has less than 2 of your rolls on, then just apply // If targ already has 2 of your rolls, remove oldest one and apply this one. @@ -1077,8 +1077,8 @@ auto CStatusEffectContainer::ApplyCorsairEffect(CStatusEffect* PStatusEffect, ui for (auto&& PEffect : m_StatusEffectSet) { - if ((PEffect->GetStatusID() >= EFFECT_FIGHTERS_ROLL && PEffect->GetStatusID() <= EFFECT_NATURALISTS_ROLL) || - PEffect->GetStatusID() == EFFECT_RUNEISTS_ROLL || PEffect->GetStatusID() == EFFECT_BUST) // is a COR effect + if ((PEffect->GetStatusID() >= xi::StatusEffect::FightersRoll && PEffect->GetStatusID() <= xi::StatusEffect::NaturalistsRoll) || + PEffect->GetStatusID() == xi::StatusEffect::RuneistsRoll || PEffect->GetStatusID() == xi::StatusEffect::Bust) // is a COR effect { if (PEffect->GetStatusID() == PStatusEffect->GetStatusID() && PEffect->GetSourceTypeParam() == PStatusEffect->GetSourceTypeParam() && PEffect->GetSubPower() < PStatusEffect->GetSubPower()) @@ -1100,21 +1100,21 @@ auto CStatusEffectContainer::ApplyCorsairEffect(CStatusEffect* PStatusEffect, ui // Pass Roll effect values into the Bust effect. Used to handle Bust debuffs in scripts/effects/bust.lua timer::duration duration = 5min; duration -= std::chrono::seconds(bustDuration); - CStatusEffect* bustEffect = new CStatusEffect(EFFECT_BUST, // Effect ID - EFFECT_BUST, // Effect Icon - PStatusEffect->GetPower(), // Effect Power (Mod Power) - 0s, // Effect Tick - duration, // Effect Duration - PStatusEffect->GetSubID(), // Effect SubType (Mod ID) - PStatusEffect->GetSubPower(), // Effect SubPower (Roll #) - PStatusEffect->GetSubIcon(), // Effect SubIcon - PStatusEffect->GetTier()); // Effect Tier + CStatusEffect* bustEffect = new CStatusEffect(xi::StatusEffect::Bust, // Effect ID + static_cast(xi::StatusEffect::Bust), // Effect Icon + PStatusEffect->GetPower(), // Effect Power (Mod Power) + 0s, // Effect Tick + duration, // Effect Duration + PStatusEffect->GetSubID(), // Effect SubType (Mod ID) + PStatusEffect->GetSubPower(), // Effect SubPower (Roll #) + PStatusEffect->GetSubIcon(), // Effect SubIcon + PStatusEffect->GetTier()); // Effect Tier bustEffect->SetSource(PEffect->GetSourceType(), PEffect->GetSourceTypeParam()); bustEffect->SetOriginID(PEffect->GetOriginID()); AddStatusEffect(bustEffect, EffectNotice::Silent); - DelStatusEffectSilent(EFFECT_DOUBLE_UP_CHANCE); + DelStatusEffectSilent(xi::StatusEffect::DoubleUpChance); } } // Everyone still loses the roll effect if the caster rolled 12+(Bust). @@ -1125,16 +1125,16 @@ auto CStatusEffectContainer::ApplyCorsairEffect(CStatusEffect* PStatusEffect, ui } // Handle Roll/Bust ordering - if (PEffect->GetSourceTypeParam() == PStatusEffect->GetSourceTypeParam() || PEffect->GetStatusID() == EFFECT_BUST) + if (PEffect->GetSourceTypeParam() == PStatusEffect->GetSourceTypeParam() || PEffect->GetStatusID() == xi::StatusEffect::Bust) { // Increment if its a roll or a bust from yourself. Do not count busts when counting roll effects from others. - if (!(PEffect->GetStatusID() == EFFECT_BUST && PStatusEffect->GetSourceTypeParam() != m_POwner->id)) + if (!(PEffect->GetStatusID() == xi::StatusEffect::Bust && PStatusEffect->GetSourceTypeParam() != m_POwner->id)) { numOfEffects++; } // Only consider rolls(Not Busts) for oldest roll tracking. - if (PEffect->GetStatusID() != EFFECT_BUST) + if (PEffect->GetStatusID() != xi::StatusEffect::Bust) { if (oldestRoll == nullptr) { @@ -1176,10 +1176,10 @@ bool CStatusEffectContainer::HasCorsairEffect(uint32 charid) { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if ((PStatusEffect->GetStatusID() >= EFFECT_FIGHTERS_ROLL && PStatusEffect->GetStatusID() <= EFFECT_NATURALISTS_ROLL) || - PStatusEffect->GetStatusID() == EFFECT_RUNEISTS_ROLL || PStatusEffect->GetStatusID() == EFFECT_BUST) // is a cor effect + if ((PStatusEffect->GetStatusID() >= xi::StatusEffect::FightersRoll && PStatusEffect->GetStatusID() <= xi::StatusEffect::NaturalistsRoll) || + PStatusEffect->GetStatusID() == xi::StatusEffect::RuneistsRoll || PStatusEffect->GetStatusID() == xi::StatusEffect::Bust) // is a cor effect { - if (PStatusEffect->GetSourceTypeParam() == charid || PStatusEffect->GetStatusID() == EFFECT_BUST) + if (PStatusEffect->GetSourceTypeParam() == charid || PStatusEffect->GetStatusID() == xi::StatusEffect::Bust) { return true; } @@ -1193,18 +1193,18 @@ void CStatusEffectContainer::Fold(uint32 charid) CStatusEffect* oldestRoll = nullptr; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if ((PStatusEffect->GetStatusID() >= EFFECT_FIGHTERS_ROLL && PStatusEffect->GetStatusID() <= EFFECT_NATURALISTS_ROLL) || - PStatusEffect->GetStatusID() == EFFECT_RUNEISTS_ROLL || PStatusEffect->GetStatusID() == EFFECT_BUST) // is a cor effect + if ((PStatusEffect->GetStatusID() >= xi::StatusEffect::FightersRoll && PStatusEffect->GetStatusID() <= xi::StatusEffect::NaturalistsRoll) || + PStatusEffect->GetStatusID() == xi::StatusEffect::RuneistsRoll || PStatusEffect->GetStatusID() == xi::StatusEffect::Bust) // is a cor effect { - if (PStatusEffect->GetSourceTypeParam() == charid || PStatusEffect->GetStatusID() == EFFECT_BUST) + if (PStatusEffect->GetSourceTypeParam() == charid || PStatusEffect->GetStatusID() == xi::StatusEffect::Bust) { if (oldestRoll == nullptr) { oldestRoll = PStatusEffect; } - else if (PStatusEffect->GetStatusID() == EFFECT_BUST) + else if (PStatusEffect->GetStatusID() == xi::StatusEffect::Bust) { - if (oldestRoll->GetStatusID() == EFFECT_BUST) + if (oldestRoll->GetStatusID() == xi::StatusEffect::Bust) { oldestRoll = PStatusEffect->GetStartTime() > oldestRoll->GetStartTime() ? PStatusEffect : oldestRoll; } @@ -1213,7 +1213,7 @@ void CStatusEffectContainer::Fold(uint32 charid) oldestRoll = PStatusEffect; } } - else if (oldestRoll->GetStatusID() != EFFECT_BUST && PStatusEffect->GetStartTime() > oldestRoll->GetStartTime()) + else if (oldestRoll->GetStatusID() != xi::StatusEffect::Bust && PStatusEffect->GetStartTime() > oldestRoll->GetStartTime()) { oldestRoll = PStatusEffect; } @@ -1223,42 +1223,42 @@ void CStatusEffectContainer::Fold(uint32 charid) if (oldestRoll != nullptr) { RemoveStatusEffect(oldestRoll); - DelStatusEffectSilent(EFFECT_DOUBLE_UP_CHANCE); + DelStatusEffectSilent(xi::StatusEffect::DoubleUpChance); } } uint8 CStatusEffectContainer::GetActiveManeuverCount() { - return GetStatusEffectCountInIDRange(EFFECT_FIRE_MANEUVER, EFFECT_DARK_MANEUVER); + return GetStatusEffectCountInIDRange(xi::StatusEffect::FireManeuver, xi::StatusEffect::DarkManeuver); } void CStatusEffectContainer::RemoveOldestManeuver() { - RemoveOldestStatusEffectInIDRange(EFFECT_FIRE_MANEUVER, EFFECT_DARK_MANEUVER); + RemoveOldestStatusEffectInIDRange(xi::StatusEffect::FireManeuver, xi::StatusEffect::DarkManeuver); } void CStatusEffectContainer::RemoveAllManeuvers() { - RemoveAllStatusEffectsInIDRange(EFFECT_FIRE_MANEUVER, EFFECT_DARK_MANEUVER); + RemoveAllStatusEffectsInIDRange(xi::StatusEffect::FireManeuver, xi::StatusEffect::DarkManeuver); } -std::vector CStatusEffectContainer::GetAllRuneEffects() +auto CStatusEffectContainer::GetAllRuneEffects() -> std::vector { - return GetStatusEffectsInIDRange(EFFECT_IGNIS, EFFECT_TENEBRAE); + return GetStatusEffectsInIDRange(xi::StatusEffect::Ignis, xi::StatusEffect::Tenebrae); } uint8 CStatusEffectContainer::GetActiveRuneCount() { - return GetStatusEffectCountInIDRange(EFFECT_IGNIS, EFFECT_TENEBRAE); + return GetStatusEffectCountInIDRange(xi::StatusEffect::Ignis, xi::StatusEffect::Tenebrae); } -EFFECT CStatusEffectContainer::GetHighestRuneEffect() +auto CStatusEffectContainer::GetHighestRuneEffect() -> xi::StatusEffect { - std::unordered_map runeEffects; + std::unordered_map runeEffects; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if (PStatusEffect->GetStatusID() >= EFFECT_IGNIS && PStatusEffect->GetStatusID() <= EFFECT_TENEBRAE && !PStatusEffect->deleted) + if (PStatusEffect->GetStatusID() >= xi::StatusEffect::Ignis && PStatusEffect->GetStatusID() <= xi::StatusEffect::Tenebrae && !PStatusEffect->deleted) { if (runeEffects.count(PStatusEffect->GetStatusID()) == 0) { @@ -1271,12 +1271,12 @@ EFFECT CStatusEffectContainer::GetHighestRuneEffect() } } - EFFECT highestRune = EFFECT_NONE; - int highestRuneValue = 0; + xi::StatusEffect highestRune = xi::StatusEffect::None; + int highestRuneValue = 0; for (auto iter = runeEffects.begin(); iter != runeEffects.end(); ++iter) { - if (highestRune == EFFECT_NONE || iter->second > highestRuneValue) + if (highestRune == xi::StatusEffect::None || iter->second > highestRuneValue) { highestRune = iter->first; highestRuneValue = iter->second; @@ -1286,24 +1286,24 @@ EFFECT CStatusEffectContainer::GetHighestRuneEffect() return highestRune; } -EFFECT CStatusEffectContainer::GetNewestRuneEffect() +auto CStatusEffectContainer::GetNewestRuneEffect() -> xi::StatusEffect { - return GetNewestStatusEffectInIDRange(EFFECT_IGNIS, EFFECT_TENEBRAE); + return GetNewestStatusEffectInIDRange(xi::StatusEffect::Ignis, xi::StatusEffect::Tenebrae); } void CStatusEffectContainer::RemoveNewestRune() { - RemoveNewestStatusEffectInIDRange(EFFECT_IGNIS, EFFECT_TENEBRAE); + RemoveNewestStatusEffectInIDRange(xi::StatusEffect::Ignis, xi::StatusEffect::Tenebrae); } void CStatusEffectContainer::RemoveOldestRune() { - RemoveOldestStatusEffectInIDRange(EFFECT_IGNIS, EFFECT_TENEBRAE); + RemoveOldestStatusEffectInIDRange(xi::StatusEffect::Ignis, xi::StatusEffect::Tenebrae); } void CStatusEffectContainer::RemoveAllRunes() { - RemoveAllStatusEffectsInIDRange(EFFECT_IGNIS, EFFECT_TENEBRAE); + RemoveAllStatusEffectsInIDRange(xi::StatusEffect::Ignis, xi::StatusEffect::Tenebrae); } /************************************************************************ @@ -1313,7 +1313,7 @@ void CStatusEffectContainer::RemoveAllRunes() * * ************************************************************************/ -bool CStatusEffectContainer::HasStatusEffect(EFFECT StatusID, uint16 SubID) +auto CStatusEffectContainer::HasStatusEffect(xi::StatusEffect StatusID, uint16 SubID) -> bool { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -1325,7 +1325,7 @@ bool CStatusEffectContainer::HasStatusEffect(EFFECT StatusID, uint16 SubID) return false; } -bool CStatusEffectContainer::HasStatusEffect(std::initializer_list effects) +auto CStatusEffectContainer::HasStatusEffect(std::initializer_list effects) -> bool { for (auto&& effect_from_set : m_StatusEffectSet) { @@ -1343,7 +1343,7 @@ bool CStatusEffectContainer::HasStatusEffect(std::initializer_list effec return false; } -CStatusEffect* CStatusEffectContainer::GetStatusEffect(EFFECT StatusID) +auto CStatusEffectContainer::GetStatusEffect(xi::StatusEffect StatusID) -> CStatusEffect* { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -1355,7 +1355,7 @@ CStatusEffect* CStatusEffectContainer::GetStatusEffect(EFFECT StatusID) return nullptr; } -CStatusEffect* CStatusEffectContainer::GetStatusEffect(EFFECT StatusID, uint32 SubID) +auto CStatusEffectContainer::GetStatusEffect(xi::StatusEffect StatusID, uint32 SubID) -> CStatusEffect* { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -1367,7 +1367,7 @@ CStatusEffect* CStatusEffectContainer::GetStatusEffect(EFFECT StatusID, uint32 S return nullptr; } -CStatusEffect* CStatusEffectContainer::GetStatusEffectBySource(EFFECT StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) +auto CStatusEffectContainer::GetStatusEffectBySource(xi::StatusEffect StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) -> CStatusEffect* { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -1385,7 +1385,7 @@ CStatusEffect* CStatusEffectContainer::GetStatusEffectBySource(EFFECT StatusID, * * ************************************************************************/ -CStatusEffect* CStatusEffectContainer::StealStatusEffect(EFFECTFLAG flag, EffectNotice notice) +auto CStatusEffectContainer::StealStatusEffect(xi::StatusEffectFlag flag, EffectNotice notice) -> CStatusEffect* { std::vector dispelableList; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -1410,6 +1410,7 @@ CStatusEffect* CStatusEffectContainer::StealStatusEffect(EFFECTFLAG flag, Effect oldEffect->GetDuration(), oldEffect->GetSubID(), oldEffect->GetSubPower(), + oldEffect->GetSubIcon(), oldEffect->GetTier(), oldEffect->GetEffectFlags(), oldEffect->GetSourceType(), @@ -1439,7 +1440,7 @@ void CStatusEffectContainer::UpdateStatusIcons() auto* PChar = static_cast(m_POwner); m_Flags = 0; - std::memset(m_StatusIcons, EFFECT_NONE, sizeof(m_StatusIcons)); + std::memset(m_StatusIcons, static_cast(xi::StatusEffect::None), sizeof(m_StatusIcons)); uint8 count = 0; @@ -1475,9 +1476,9 @@ void CStatusEffectContainer::UpdateStatusIcons() } } -std::vector CStatusEffectContainer::GetStatusEffectsInIDRange(EFFECT start, EFFECT end) +auto CStatusEffectContainer::GetStatusEffectsInIDRange(xi::StatusEffect start, xi::StatusEffect end) -> std::vector { - std::vector effectList; + std::vector effectList; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -1489,7 +1490,7 @@ std::vector CStatusEffectContainer::GetStatusEffectsInIDRange(EFFECT sta return effectList; } -uint8 CStatusEffectContainer::GetStatusEffectCountInIDRange(EFFECT start, EFFECT end) +auto CStatusEffectContainer::GetStatusEffectCountInIDRange(xi::StatusEffect start, xi::StatusEffect end) -> uint8 { uint8 count = 0; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -1502,7 +1503,7 @@ uint8 CStatusEffectContainer::GetStatusEffectCountInIDRange(EFFECT start, EFFECT return count; } -EFFECT CStatusEffectContainer::GetNewestStatusEffectInIDRange(EFFECT start, EFFECT end) +auto CStatusEffectContainer::GetNewestStatusEffectInIDRange(xi::StatusEffect start, xi::StatusEffect end) -> xi::StatusEffect { CStatusEffect* newest = nullptr; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -1519,10 +1520,10 @@ EFFECT CStatusEffectContainer::GetNewestStatusEffectInIDRange(EFFECT start, EFFE { return newest->GetStatusID(); } - return EFFECT_NONE; + return xi::StatusEffect::None; } -void CStatusEffectContainer::RemoveOldestStatusEffectInIDRange(EFFECT start, EFFECT end) +void CStatusEffectContainer::RemoveOldestStatusEffectInIDRange(xi::StatusEffect start, xi::StatusEffect end) { CStatusEffect* oldest = nullptr; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -1541,7 +1542,7 @@ void CStatusEffectContainer::RemoveOldestStatusEffectInIDRange(EFFECT start, EFF } } -void CStatusEffectContainer::RemoveNewestStatusEffectInIDRange(EFFECT start, EFFECT end) +void CStatusEffectContainer::RemoveNewestStatusEffectInIDRange(xi::StatusEffect start, xi::StatusEffect end) { CStatusEffect* newest = nullptr; for (CStatusEffect* PStatusEffect : m_StatusEffectSet) @@ -1560,7 +1561,7 @@ void CStatusEffectContainer::RemoveNewestStatusEffectInIDRange(EFFECT start, EFF } } -void CStatusEffectContainer::RemoveAllStatusEffectsInIDRange(EFFECT start, EFFECT end) +void CStatusEffectContainer::RemoveAllStatusEffectsInIDRange(xi::StatusEffect start, xi::StatusEffect end) { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { @@ -1579,24 +1580,24 @@ void CStatusEffectContainer::RemoveAllStatusEffectsInIDRange(EFFECT start, EFFEC auto CStatusEffectContainer::SetEffectParams(CStatusEffect* StatusEffect) -> void { - if (StatusEffect->GetStatusID() >= MAX_EFFECTID) + if (static_cast(StatusEffect->GetStatusID()) >= MAX_EFFECTID) { - ShowWarning("Status Effect ID (%d) exceeds MAX_EFFECTID", StatusEffect->GetStatusID()); + ShowWarning("Status Effect ID (%d) exceeds MAX_EFFECTID", static_cast(StatusEffect->GetStatusID())); return; } auto subType = StatusEffect->GetSubID(); - if (StatusEffect->GetStatusID() == EFFECT_NONE && subType == 0) + if (StatusEffect->GetStatusID() == xi::StatusEffect::None && subType == 0) { ShowWarning("None-type Effect has SubID of 0"); return; } - std::string name; - EFFECT effect = StatusEffect->GetStatusID(); - auto effectSourceType = StatusEffect->GetSourceType(); - auto effectSourceTypeParam = StatusEffect->GetSourceTypeParam(); + std::string name; + xi::StatusEffect effect = StatusEffect->GetStatusID(); + auto effectSourceType = StatusEffect->GetSourceType(); + auto effectSourceTypeParam = StatusEffect->GetSourceTypeParam(); // check if status effect is special case from a usable equipped item that grants enchantment bool effectFromItemEnchant = false; @@ -1649,15 +1650,15 @@ auto CStatusEffectContainer::SetEffectParams(CStatusEffect* StatusEffect) -> voi } // Effects that use /server/scripts/effects/ as their lua file source. - if (!effectFromItemEnchant && // The effect is not from an item enchantment (See condition above). - !effectFromItemFood && // The effect is not from a usable food item. - effect != EFFECT_ENCHANTMENT && // The effect is not an enchantment that has an effect source defined currently. - effectSourceType != EffectSourceType::SOURCE_EQUIPPED_ITEM && // The source is not from an equipped item - (effect != EFFECT_FOOD || // Exclude food effects with a sourceTypeParam > 0 (See condition below) - (effect == EFFECT_FOOD && effectSourceTypeParam == 0))) // Food effects from FoV/Gov Books have a subType of 0 and are handled in the scripts/effects/food.lua + if (!effectFromItemEnchant && // The effect is not from an item enchantment (See condition above). + !effectFromItemFood && // The effect is not from a usable food item. + effect != xi::StatusEffect::Enchantment && // The effect is not an enchantment that has an effect source defined currently. + effectSourceType != EffectSourceType::SOURCE_EQUIPPED_ITEM && // The source is not from an equipped item + (effect != xi::StatusEffect::Food || // Exclude food effects with a sourceTypeParam > 0 (See condition below) + (effect == xi::StatusEffect::Food && effectSourceTypeParam == 0))) // Food effects from FoV/Gov Books have a subType of 0 and are handled in the scripts/effects/food.lua { name.insert(0, "effects/"); - name.insert(name.size(), effects::EffectsParams[effect].Name); + name.insert(name.size(), effects::EffectsParams[static_cast(effect)].Name); } // Is an effect from a usable item not caught above. @@ -1673,8 +1674,8 @@ auto CStatusEffectContainer::SetEffectParams(CStatusEffect* StatusEffect) -> voi } StatusEffect->SetEffectName(name); - StatusEffect->AddEffectFlag(effects::EffectsParams[effect].Flag); - StatusEffect->SetEffectType(effects::EffectsParams[effect].Type); + StatusEffect->AddEffectFlag(effects::EffectsParams[static_cast(effect)].Flag); + StatusEffect->SetEffectType(effects::EffectsParams[static_cast(effect)].Type); } /************************************************************************ @@ -1706,9 +1707,9 @@ void CStatusEffectContainer::LoadStatusEffects() { const auto flags = rset->get("flags"); timer::duration duration = std::chrono::seconds(rset->get("duration")); - const auto effectID = rset->get("effectid"); + const auto effectID = rset->get("effectid"); - if (flags & EFFECTFLAG_OFFLINE_TICK) + if (flags & static_cast(xi::StatusEffectFlag::OfflineTick)) { auto currentTime = timer::now(); auto startTime = timer::from_utc(earth_time::time_point(std::chrono::seconds(rset->get("timestamp")))); @@ -1717,7 +1718,7 @@ void CStatusEffectContainer::LoadStatusEffects() { duration = endTime - currentTime; } - else if (effectID == EFFECT::EFFECT_VISITANT) + else if (effectID == xi::StatusEffect::Visitant) { // Visitant effect expired while offline, but there's other logic to handle. // Set duration to 1 so that it expires after zoning in, and the player is ejected. @@ -1739,7 +1740,7 @@ void CStatusEffectContainer::LoadStatusEffects() rset->get("subpower"), 0, // SubIcon (not persisted in char_effects) rset->get("tier"), - flags, + static_cast(flags), rset->get("sourcetype"), rset->get("sourcetypeparam"), rset->get("originid")); @@ -1747,11 +1748,11 @@ void CStatusEffectContainer::LoadStatusEffects() PEffectList.emplace_back(PStatusEffect); // load shadows left - if (PStatusEffect->GetStatusID() == EFFECT_COPY_IMAGE) + if (PStatusEffect->GetStatusID() == xi::StatusEffect::CopyImage) { m_POwner->setModifier(Mod::UTSUSEMI, PStatusEffect->GetSubPower()); } - else if (PStatusEffect->GetStatusID() == EFFECT_BLINK) + else if (PStatusEffect->GetStatusID() == xi::StatusEffect::Blink) { m_POwner->setModifier(Mod::BLINK, PStatusEffect->GetPower()); } @@ -1785,7 +1786,7 @@ void CStatusEffectContainer::SaveStatusEffects(bool logout) for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if ((logout && PStatusEffect->HasEffectFlag(EFFECTFLAG_LOGOUT)) || (!logout && PStatusEffect->HasEffectFlag(EFFECTFLAG_ON_ZONE))) + if ((logout && PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::Logout)) || (!logout && PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::OnZone))) { RemoveStatusEffect(PStatusEffect, EffectNotice::Silent); continue; @@ -1802,15 +1803,15 @@ void CStatusEffectContainer::SaveStatusEffects(bool logout) if (realDurationSeconds > 0 || durationSeconds == 0) { // save power of utsusemi and blink - if (PStatusEffect->GetStatusID() == EFFECT_COPY_IMAGE) + if (PStatusEffect->GetStatusID() == xi::StatusEffect::CopyImage) { PStatusEffect->SetSubPower(m_POwner->getMod(Mod::UTSUSEMI)); } - else if (PStatusEffect->GetStatusID() == EFFECT_BLINK) + else if (PStatusEffect->GetStatusID() == xi::StatusEffect::Blink) { PStatusEffect->SetPower(m_POwner->getMod(Mod::BLINK)); } - else if (PStatusEffect->GetStatusID() == EFFECT_STONESKIN) + else if (PStatusEffect->GetStatusID() == xi::StatusEffect::Stoneskin) { PStatusEffect->SetPower(m_POwner->getMod(Mod::STONESKIN)); } @@ -1819,7 +1820,7 @@ void CStatusEffectContainer::SaveStatusEffects(bool logout) if (durationSeconds > 0) { - if (PStatusEffect->HasEffectFlag(EFFECTFLAG_OFFLINE_TICK)) + if (PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::OfflineTick)) { duration = static_cast(durationSeconds); } @@ -1842,7 +1843,7 @@ void CStatusEffectContainer::SaveStatusEffects(bool logout) db::preparedStmt("INSERT INTO char_effects (charid, effectid, icon, power, tick, duration, subid, subpower, tier, flags, timestamp, sourcetype, sourcetypeparam, originid) " "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m_POwner->id, - PStatusEffect->GetStatusID(), + static_cast(PStatusEffect->GetStatusID()), PStatusEffect->GetIcon(), PStatusEffect->GetPower(), tick, @@ -1850,7 +1851,7 @@ void CStatusEffectContainer::SaveStatusEffects(bool logout) PStatusEffect->GetSubID(), PStatusEffect->GetSubPower(), PStatusEffect->GetTier(), - PStatusEffect->GetEffectFlags(), + static_cast(PStatusEffect->GetEffectFlags()), timestamp, PStatusEffect->GetSourceType(), PStatusEffect->GetSourceTypeParam(), @@ -1916,15 +1917,15 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) distance(m_POwner->loc.p, PMember->loc.p) <= aura_range + PMember->modelHitboxSize && !PMember->isDead()) { - CStatusEffect* PEffect = PMember->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); + CStatusEffect* PEffect = PMember->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); - if (PEffect && (PEffect->GetEffectFlags() & EFFECTFLAG_ALWAYS_EXPIRING) != 0) + if (PEffect && (PEffect->GetEffectFlags() & xi::StatusEffectFlag::AlwaysExpiring) != xi::StatusEffectFlag::None) { PEffect->SetStartTime(timer::now()); // Effect updated, probably from Ecliptic Attrition // Update status effect with new potency. - // Take care to design your "owning" effects such as the EFFECT::EFFECT_COLURE_ACTIVE to control the subpower, rather than the resulting effect ticking down. + // Take care to design your "owning" effects such as the xi::StatusEffect::ColureActive to control the subpower, rather than the resulting effect ticking down. // Otherwise odd things may happen if (PEffect->GetPower() != PStatusEffect->GetSubPower()) { @@ -1937,13 +1938,13 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) { uint16 icon = PStatusEffect->GetSubIcon() > 0 ? PStatusEffect->GetSubIcon() : PStatusEffect->GetSubID(); - PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID + PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID icon, // Effect Icon PStatusEffect->GetSubPower(), // Power 3s, // Tick 4s); // Duration - PEffect->AddEffectFlag(EFFECTFLAG_NO_LOSS_MESSAGE); - PEffect->AddEffectFlag(EFFECTFLAG_ALWAYS_EXPIRING); + PEffect->AddEffectFlag(xi::StatusEffectFlag::NoLossMessage); + PEffect->AddEffectFlag(xi::StatusEffectFlag::AlwaysExpiring); PMember->StatusEffectContainer->AddStatusEffect(PEffect, EffectNotice::Silent); } } @@ -1960,15 +1961,15 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) PTarget->objtype != TYPE_TRUST && PEntity->loc.zone->GetID() == PTarget->loc.zone->GetID() && distance(m_POwner->loc.p, PTarget->loc.p) <= aura_range + PTarget->modelHitboxSize && !PTarget->isDead()) { - CStatusEffect* PEffect = PTarget->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); + CStatusEffect* PEffect = PTarget->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); - if (PEffect && (PEffect->GetEffectFlags() & EFFECTFLAG_ALWAYS_EXPIRING) != 0) + if (PEffect && (PEffect->GetEffectFlags() & xi::StatusEffectFlag::AlwaysExpiring) != xi::StatusEffectFlag::None) { PEffect->SetStartTime(timer::now()); // Effect updated, probably from Ecliptic Attrition // Update status effect with new potency. - // Take care to design your "owning" effects such as the EFFECT::EFFECT_COLURE_ACTIVE to control the subpower, rather than the resulting effect ticking down. + // Take care to design your "owning" effects such as the xi::StatusEffect::ColureActive to control the subpower, rather than the resulting effect ticking down. // Otherwise odd things may happen if (PEffect->GetPower() != PStatusEffect->GetSubPower()) { @@ -1981,13 +1982,13 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) { uint16 icon = PStatusEffect->GetSubIcon() > 0 ? PStatusEffect->GetSubIcon() : PStatusEffect->GetSubID(); - PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID - icon, // Effect Icon - PStatusEffect->GetSubPower(), // Power - 3s, // Tick - 4s); // Duration - PEffect->AddEffectFlag(EFFECTFLAG_NO_LOSS_MESSAGE); - PEffect->AddEffectFlag(EFFECTFLAG_ALWAYS_EXPIRING); + PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID + icon, // Effect Icon + PStatusEffect->GetSubPower(), // Power + 3s, // Tick + 4s); // Duration + PEffect->AddEffectFlag(xi::StatusEffectFlag::NoLossMessage); + PEffect->AddEffectFlag(xi::StatusEffectFlag::AlwaysExpiring); PTarget->StatusEffectContainer->AddStatusEffect(PEffect, EffectNotice::Silent); } } @@ -2007,15 +2008,15 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) PEntity->loc.zone->GetID() == PMember->loc.zone->GetID() && distance(m_POwner->loc.p, PMember->loc.p) <= aura_range + PMember->modelHitboxSize && !PMember->isDead()) { - CStatusEffect* PEffect = PMember->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); + CStatusEffect* PEffect = PMember->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); - if (PEffect && (PEffect->GetEffectFlags() & EFFECTFLAG_ALWAYS_EXPIRING) != 0) + if (PEffect && (PEffect->GetEffectFlags() & xi::StatusEffectFlag::AlwaysExpiring) != xi::StatusEffectFlag::None) { PEffect->SetStartTime(timer::now()); // Effect updated, probably from Ecliptic Attrition // Update status effect with new potency. - // Take care to design your "owning" effects such as the EFFECT::EFFECT_COLURE_ACTIVE to control the subpower, rather than the resulting effect ticking down. + // Take care to design your "owning" effects such as the xi::StatusEffect::ColureActive to control the subpower, rather than the resulting effect ticking down. // Otherwise odd things may happen if (PEffect->GetPower() != PStatusEffect->GetSubPower()) { @@ -2028,13 +2029,13 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) { uint16 icon = PStatusEffect->GetSubIcon() > 0 ? PStatusEffect->GetSubIcon() : PStatusEffect->GetSubID(); - PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID + PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID icon, // Effect Icon PStatusEffect->GetSubPower(), // Power 3s, // Tick 4s); // Duration - PEffect->AddEffectFlag(EFFECTFLAG_NO_LOSS_MESSAGE); - PEffect->AddEffectFlag(EFFECTFLAG_ALWAYS_EXPIRING); + PEffect->AddEffectFlag(xi::StatusEffectFlag::NoLossMessage); + PEffect->AddEffectFlag(xi::StatusEffectFlag::AlwaysExpiring); PMember->StatusEffectContainer->AddStatusEffect(PEffect, EffectNotice::Silent); } } @@ -2054,15 +2055,15 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) PEntity->loc.zone->GetID() == PTarget->loc.zone->GetID() && distance(m_POwner->loc.p, PTarget->loc.p) <= aura_range + PTarget->modelHitboxSize && !PTarget->isDead()) { - CStatusEffect* PEffect = PTarget->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); + CStatusEffect* PEffect = PTarget->StatusEffectContainer->GetStatusEffect(static_cast(PStatusEffect->GetSubID())); - if (PEffect && (PEffect->GetEffectFlags() & EFFECTFLAG_ALWAYS_EXPIRING) != 0) + if (PEffect && (PEffect->GetEffectFlags() & xi::StatusEffectFlag::AlwaysExpiring) != xi::StatusEffectFlag::None) { PEffect->SetStartTime(timer::now()); // Effect updated, probably from Ecliptic Attrition // Update status effect with new potency. - // Take care to design your "owning" effects such as the EFFECT::EFFECT_COLURE_ACTIVE to control the subpower, rather than the resulting effect ticking down. + // Take care to design your "owning" effects such as the xi::StatusEffect::ColureActive to control the subpower, rather than the resulting effect ticking down. // Otherwise odd things may happen if (PEffect->GetPower() != PStatusEffect->GetSubPower()) { @@ -2075,13 +2076,13 @@ void CStatusEffectContainer::HandleAura(CStatusEffect* PStatusEffect) { uint16 icon = PStatusEffect->GetSubIcon() > 0 ? PStatusEffect->GetSubIcon() : PStatusEffect->GetSubID(); - PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID - icon, // Effect Icon - PStatusEffect->GetSubPower(), // Power - 3s, // Tick - 4s); // Duration - PEffect->AddEffectFlag(EFFECTFLAG_NO_LOSS_MESSAGE); - PEffect->AddEffectFlag(EFFECTFLAG_ALWAYS_EXPIRING); + PEffect = new CStatusEffect(static_cast(PStatusEffect->GetSubID()), // Effect ID + icon, // Effect Icon + PStatusEffect->GetSubPower(), // Power + 3s, // Tick + 4s); // Duration + PEffect->AddEffectFlag(xi::StatusEffectFlag::NoLossMessage); + PEffect->AddEffectFlag(xi::StatusEffectFlag::AlwaysExpiring); PTarget->StatusEffectContainer->AddStatusEffect(PEffect, EffectNotice::Silent); } } @@ -2114,7 +2115,7 @@ void CStatusEffectContainer::TickEffects(timer::time_point tick) if (PStatusEffect->GetTickTime() != 0s && PStatusEffect->GetElapsedTickCount() < (tick - PStatusEffect->GetStartTime()) / PStatusEffect->GetTickTime()) { - if (PStatusEffect->HasEffectFlag(EFFECTFLAG_AURA)) + if (PStatusEffect->HasEffectFlag(xi::StatusEffectFlag::Aura)) { HandleAura(PStatusEffect); } @@ -2164,15 +2165,15 @@ void CStatusEffectContainer::TickRegen(timer::time_point tick) if (damage > 0) { - DelStatusEffectSilent(EFFECT_HEALING); + DelStatusEffectSilent(xi::StatusEffect::Healing); m_POwner->takeDamage(damage); // If target has nightmare sleep. Don't break sleep from REGEN_DOWN damage // see mobskills/nightmare.lua for full explanation if ( !( - m_POwner->StatusEffectContainer->GetStatusEffect(EFFECT_SLEEP) && - m_POwner->StatusEffectContainer->GetStatusEffect(EFFECT_SLEEP)->GetTier() >= 4)) // Tier 4 = Player Avatar Nightmare + m_POwner->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::SleepI) && + m_POwner->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::SleepI)->GetTier() >= 4)) // Tier 4 = Player Avatar Nightmare { WakeUp(); } @@ -2244,7 +2245,7 @@ void CStatusEffectContainer::TickRegen(timer::time_point tick) } // Avatar's Favor multiplier after all regular reductions. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_AVATARS_FAVOR) && + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AvatarsFavor) && ((PPet->m_PetID >= PETID_CARBUNCLE && PPet->m_PetID <= PETID_CAIT_SITH) || PPet->m_PetID == PETID_SIREN)) { perpetuationCost = static_cast(perpetuationCost * 1.2); // Confirmed it's floored. @@ -2252,7 +2253,7 @@ void CStatusEffectContainer::TickRegen(timer::time_point tick) } // Astral Flow. - if (m_POwner->StatusEffectContainer->HasStatusEffect(EFFECT_ASTRAL_FLOW)) + if (m_POwner->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AstralFlow)) { perpetuationCost = 0; } @@ -2297,17 +2298,17 @@ bool CStatusEffectContainer::HasPreventActionEffect(bool ignoreCharm) if (ignoreCharm) { return HasStatusEffect( - { EFFECT_SLEEP, EFFECT_SLEEP_II, EFFECT_PETRIFICATION, EFFECT_LULLABY, EFFECT_PENALTY, EFFECT_STUN, EFFECT_TERROR }); + { xi::StatusEffect::SleepI, xi::StatusEffect::SleepIi, xi::StatusEffect::Petrification, xi::StatusEffect::Lullaby, xi::StatusEffect::Penalty, xi::StatusEffect::Stun, xi::StatusEffect::Terror }); } return HasStatusEffect( - { EFFECT_SLEEP, EFFECT_SLEEP_II, EFFECT_PETRIFICATION, EFFECT_LULLABY, EFFECT_CHARM, EFFECT_CHARM_II, EFFECT_PENALTY, EFFECT_STUN, EFFECT_TERROR }); + { xi::StatusEffect::SleepI, xi::StatusEffect::SleepIi, xi::StatusEffect::Petrification, xi::StatusEffect::Lullaby, xi::StatusEffect::CharmI, xi::StatusEffect::CharmIi, xi::StatusEffect::Penalty, xi::StatusEffect::Stun, xi::StatusEffect::Terror }); } uint16 CStatusEffectContainer::GetConfrontationEffect() { for (auto* PEffect : m_StatusEffectSet) { - if (PEffect->HasEffectFlag(EFFECTFLAG_CONFRONTATION)) + if (PEffect->HasEffectFlag(xi::StatusEffectFlag::Confrontation)) { return PEffect->GetPower(); } @@ -2319,7 +2320,7 @@ void CStatusEffectContainer::CopyConfrontationEffect(CBattleEntity* PEntity) { for (auto* PEffect : m_StatusEffectSet) { - if (PEffect->HasEffectFlag(EFFECTFLAG_CONFRONTATION)) + if (PEffect->HasEffectFlag(xi::StatusEffectFlag::Confrontation)) { PEntity->StatusEffectContainer->AddStatusEffect(new CStatusEffect(*PEffect)); } @@ -2330,9 +2331,9 @@ bool CStatusEffectContainer::CheckForElevenRoll() { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if ((PStatusEffect->GetStatusID() >= EFFECT_FIGHTERS_ROLL && PStatusEffect->GetStatusID() <= EFFECT_NATURALISTS_ROLL && + if ((PStatusEffect->GetStatusID() >= xi::StatusEffect::FightersRoll && PStatusEffect->GetStatusID() <= xi::StatusEffect::NaturalistsRoll && PStatusEffect->GetSubPower() == 11) || - (PStatusEffect->GetStatusID() == EFFECT_RUNEISTS_ROLL && PStatusEffect->GetSubPower() == 11)) + (PStatusEffect->GetStatusID() == xi::StatusEffect::RuneistsRoll && PStatusEffect->GetSubPower() == 11)) { return true; } @@ -2342,21 +2343,21 @@ bool CStatusEffectContainer::CheckForElevenRoll() bool CStatusEffectContainer::IsAsleep() { - return HasStatusEffect({ EFFECT_SLEEP, EFFECT_SLEEP_II, EFFECT_LULLABY }); + return HasStatusEffect({ xi::StatusEffect::SleepI, xi::StatusEffect::SleepIi, xi::StatusEffect::Lullaby }); } void CStatusEffectContainer::WakeUp() { - DelStatusEffect(EFFECT_SLEEP); - DelStatusEffect(EFFECT_SLEEP_II); - DelStatusEffect(EFFECT_LULLABY); + DelStatusEffect(xi::StatusEffect::SleepI); + DelStatusEffect(xi::StatusEffect::SleepIi); + DelStatusEffect(xi::StatusEffect::Lullaby); } bool CStatusEffectContainer::HasBustEffect(uint16 id) { for (CStatusEffect* PStatusEffect : m_StatusEffectSet) { - if (PStatusEffect->GetStatusID() == EFFECT_BUST && PStatusEffect->GetSubPower() == id) + if (PStatusEffect->GetStatusID() == xi::StatusEffect::Bust && PStatusEffect->GetSubPower() == id) { return true; } diff --git a/src/map/status_effect_container.h b/src/map/status_effect_container.h index b63a9473715..f2b8f8eda55 100644 --- a/src/map/status_effect_container.h +++ b/src/map/status_effect_container.h @@ -50,40 +50,40 @@ class CStatusEffectContainer bool ApplyBardEffect(CStatusEffect* PStatusEffect, uint8 maxSongs); bool CanGainStatusEffect(CStatusEffect* PStatusEffect); // returns true if the status effect will take effect bool AddStatusEffect(CStatusEffect* StatusEffect, EffectNotice = EffectNotice::ShowMessage); - bool DelStatusEffect(EFFECT StatusID); - bool DelStatusEffectSilent(EFFECT StatusID); - bool DelStatusEffect(EFFECT StatusID, uint16 SubID); - bool DelStatusEffectBySource(EFFECT StatusID, EffectSourceType EffectSourceType, uint16 SourceTypeParam); - void DelStatusEffectsByFlag(uint32 flag, EffectNotice notice = EffectNotice::ShowMessage); // Remove all the status effects with the specified type - void DelStatusEffectsByIcon(uint16 BuffNo); // Remove all effects with the specified icon + auto DelStatusEffect(xi::StatusEffect StatusID) -> bool; + auto DelStatusEffectSilent(xi::StatusEffect StatusID) -> bool; + auto DelStatusEffect(xi::StatusEffect StatusID, uint16 SubID) -> bool; + auto DelStatusEffectBySource(xi::StatusEffect StatusID, EffectSourceType EffectSourceType, uint16 SourceTypeParam) -> bool; + void DelStatusEffectsByFlag(xi::StatusEffectFlag flag, EffectNotice notice = EffectNotice::ShowMessage); // Remove all the status effects with the specified type + void DelStatusEffectsByIcon(uint16 BuffNo); // Remove all effects with the specified icon void DelStatusEffectsByType(uint16 Type); - bool DelStatusEffectByTier(EFFECT StatusID, uint16 power); + auto DelStatusEffectByTier(xi::StatusEffect StatusID, uint16 power) -> bool; void KillAllStatusEffect(); void ApplyStateAlteringEffects(CStatusEffect* StatusEffect); - bool HasStatusEffect(EFFECT StatusID); // We check the presence of the effect - bool HasStatusEffect(EFFECT StatusID, uint16 SubID); // Check the presence of an effect with a unique Subid - bool HasStatusEffect(std::initializer_list); - bool HasStatusEffectByFlag(uint32 flag); + auto HasStatusEffect(xi::StatusEffect StatusID) -> bool; // We check the presence of the effect + auto HasStatusEffect(xi::StatusEffect StatusID, uint16 SubID) -> bool; // Check the presence of an effect with a unique Subid + auto HasStatusEffect(std::initializer_list) -> bool; + auto HasStatusEffectByFlag(xi::StatusEffectFlag flag) -> bool; - EFFECT EraseStatusEffect(); // We delete the first negative effect - EFFECT HealingWaltz(); // dancers healing waltz - uint8 EraseAllStatusEffect(); // erases all status effects - EFFECT DispelStatusEffect(EFFECTFLAG flag); // We delete the first positive effect - uint8 DispelAllStatusEffect(EFFECTFLAG flag); // dispels all status effects - CStatusEffect* StealStatusEffect(EFFECTFLAG flag, EffectNotice notice); // dispels one effect and returns it + auto EraseStatusEffect() -> xi::StatusEffect; // We delete the first negative effect + auto HealingWaltz() -> xi::StatusEffect; // dancers healing waltz + uint8 EraseAllStatusEffect(); // erases all status effects + auto DispelStatusEffect(xi::StatusEffectFlag flag) -> xi::StatusEffect; // We delete the first positive effect + auto DispelAllStatusEffect(xi::StatusEffectFlag flag) -> uint8; // dispels all status effects + auto StealStatusEffect(xi::StatusEffectFlag flag, EffectNotice notice) -> CStatusEffect*; // dispels one effect and returns it - CStatusEffect* GetStatusEffect(EFFECT StatusID); - CStatusEffect* GetStatusEffect(EFFECT StatusID, uint32 SubID); - CStatusEffect* GetStatusEffectBySource(EFFECT StatusID, EffectSourceType Sourcetype, uint16 SourceTypeParam); + auto GetStatusEffect(xi::StatusEffect StatusID) -> CStatusEffect*; + auto GetStatusEffect(xi::StatusEffect StatusID, uint32 SubID) -> CStatusEffect*; + auto GetStatusEffectBySource(xi::StatusEffect StatusID, EffectSourceType Sourcetype, uint16 SourceTypeParam) -> CStatusEffect*; - std::vector GetStatusEffectsInIDRange(EFFECT start, EFFECT end); + auto GetStatusEffectsInIDRange(xi::StatusEffect start, xi::StatusEffect end) -> std::vector; - uint8 GetStatusEffectCountInIDRange(EFFECT start, EFFECT end); - EFFECT GetNewestStatusEffectInIDRange(EFFECT start, EFFECT end); - void RemoveOldestStatusEffectInIDRange(EFFECT start, EFFECT end); - void RemoveNewestStatusEffectInIDRange(EFFECT start, EFFECT end); - void RemoveAllStatusEffectsInIDRange(EFFECT start, EFFECT end); + auto GetStatusEffectCountInIDRange(xi::StatusEffect start, xi::StatusEffect end) -> uint8; + auto GetNewestStatusEffectInIDRange(xi::StatusEffect start, xi::StatusEffect end) -> xi::StatusEffect; + void RemoveOldestStatusEffectInIDRange(xi::StatusEffect start, xi::StatusEffect end); + void RemoveNewestStatusEffectInIDRange(xi::StatusEffect start, xi::StatusEffect end); + void RemoveAllStatusEffectsInIDRange(xi::StatusEffect start, xi::StatusEffect end); void UpdateStatusIcons(); // We recall the effects of the effects void CheckEffectsExpiry(timer::time_point tick); @@ -93,9 +93,9 @@ class CStatusEffectContainer void LoadStatusEffects(); // We load the character effects void SaveStatusEffects(bool logout = false); // We keep the character effects - uint8 GetEffectsCount(EFFECT ID); // We get the number of effects with the specified ID - uint8 GetEffectsCountWithFlag(EFFECTFLAG flag); // We get the number of effects with the specified flag - uint8 GetLowestFreeSlot(); // returns the lowest free slot for songs/rolls + auto GetEffectsCount(xi::StatusEffect ID) -> uint8; // We get the number of effects with the specified ID + auto GetEffectsCountWithFlag(xi::StatusEffectFlag flag) -> uint8; // We get the number of effects with the specified flag + uint8 GetLowestFreeSlot(); // returns the lowest free slot for songs/rolls auto ApplyCorsairEffect(CStatusEffect* PStatusEffect, uint8 maxRolls, uint8 bustDuration) -> bool; bool CheckForElevenRoll(); @@ -107,14 +107,14 @@ class CStatusEffectContainer void RemoveOldestManeuver(); void RemoveAllManeuvers(); - std::vector GetAllRuneEffects(); + auto GetAllRuneEffects() -> std::vector; - uint8 GetActiveRuneCount(); - EFFECT GetHighestRuneEffect(); - EFFECT GetNewestRuneEffect(); - void RemoveOldestRune(); - void RemoveNewestRune(); - void RemoveAllRunes(); + uint8 GetActiveRuneCount(); + auto GetHighestRuneEffect() -> xi::StatusEffect; + auto GetNewestRuneEffect() -> xi::StatusEffect; + void RemoveOldestRune(); + void RemoveNewestRune(); + void RemoveAllRunes(); void WakeUp(); // remove sleep effects bool IsAsleep(); @@ -138,7 +138,7 @@ class CStatusEffectContainer private: CBattleEntity* m_POwner = nullptr; - // void ReplaceStatusEffect(EFFECT effect); //this needs to be implemented + // void ReplaceStatusEffect(xi::StatusEffect effect); //this needs to be implemented void RemoveStatusEffect(CStatusEffect* PStatusEffect, EffectNotice notice = EffectNotice::ShowMessage); // We remove the effect by its number in the container void DeleteStatusEffects(); auto SetEffectParams(CStatusEffect* StatusEffect) -> void; // We set the effect of the effect diff --git a/src/map/utils/battleutils.cpp b/src/map/utils/battleutils.cpp index 7124afb18c7..b22c0bf9e55 100644 --- a/src/map/utils/battleutils.cpp +++ b/src/map/utils/battleutils.cpp @@ -591,11 +591,11 @@ int32 CalculateEnspellDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, { if (element == ELEMENT_DARK) { - PAttacker->StatusEffectContainer->DelStatusEffect(EFFECT_ENDARK); + PAttacker->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Endark); } else { - PAttacker->StatusEffectContainer->DelStatusEffect(EFFECT_ENLIGHT); + PAttacker->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Enlight); } } @@ -641,8 +641,8 @@ int32 CalculateEnspellDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, double min = 0.0; double max = 0.0; - EFFECT highestRuneEffect = PAttacker->StatusEffectContainer->GetHighestRuneEffect(); - int runeBonus = PAttacker->StatusEffectContainer->GetEffectsCount(highestRuneEffect); + xi::StatusEffect highestRuneEffect = PAttacker->StatusEffectContainer->GetHighestRuneEffect(); + int runeBonus = PAttacker->StatusEffectContainer->GetEffectsCount(highestRuneEffect); if (runeBonus == 1) { @@ -720,7 +720,7 @@ int32 CalculateEnspellDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, // 2) Composure bonus: only RDM main, only Tier I/II elemental (Fire..Water) if (PChar && PChar->GetMJob() == JOB_RDM && - PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_COMPOSURE) && + PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Composure) && (Tier == 1 || Tier == 2) && (element >= 1 && element <= 6)) { @@ -872,7 +872,7 @@ auto HandleSpikesDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, acti Action->spikesParam = std::max(PDefender->getMod(Mod::SPIKES_DMG), 0); // Handle Retaliation - if (PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_RETALIATION) && PDefender->PAI->IsEngaged() && + if (PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Retaliation) && PDefender->PAI->IsEngaged() && battleutils::GetHitRate(PDefender, PAttacker) / 2 > xirand::GetRandomNumber(100) && facing(PDefender->loc.p, PAttacker->loc.p, 64)) { // Retaliation rate is based on player acc vs mob evasion. Missed retaliations do not even display in log. @@ -970,7 +970,7 @@ auto HandleSpikesDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, acti { if (PDefender->isAlive()) { - if (auto* PEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_DREAD_SPIKES)) + if (auto* PEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::DreadSpikes)) { // see https://www.bg-wiki.com/ffxi/Dread_Spikes @@ -980,7 +980,7 @@ auto HandleSpikesDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, acti { spikesDamage = std::min(spikesDamage, remainingDrain); Action->spikesParam = static_cast(spikesDamage); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_DREAD_SPIKES); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::DreadSpikes); } else { @@ -1118,13 +1118,13 @@ auto HandleSpikesEquip(CBattleEntity* PAttacker, CBattleEntity* PDefender, actio if (spikesType == ActionReactKind::CurseSpikes) { Action->spikesMessage = MsgBasic::StatusSpikes; - Action->spikesParam = EFFECT_CURSE; + Action->spikesParam = static_cast(xi::StatusEffect::CurseI); } /* Todo: wire this up fully. else if (spikesType == SUBEFFECT_DEATH_SPIKES) { Action->spikesMessage = MsgBasic::StatusSpikes; - Action->spikesParam = EFFECT_KO; + Action->spikesParam = xi::StatusEffect::Ko; PDefender->setHP(0); } */ @@ -1181,25 +1181,25 @@ void HandleSpikesStatusEffect(const CBattleEntity* PAttacker, const CBattleEntit { case ActionReactKind::CurseSpikes: { - if (!PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_CURSE)) + if (!PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::CurseI)) { - PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_CURSE, EFFECT_CURSE, 15, 0s, 3min)); + PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::CurseI, static_cast(xi::StatusEffect::CurseI), 15, 0s, 3min)); } break; } case ActionReactKind::IceSpikes: { - if (xirand::GetRandomNumber(100) < 20 + lvlDiff && !PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_PARALYSIS)) + if (xirand::GetRandomNumber(100) < 20 + lvlDiff && !PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Paralysis)) { - PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_PARALYSIS, EFFECT_PARALYSIS, 20, 0s, 30s)); + PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Paralysis, static_cast(xi::StatusEffect::Paralysis), 20, 0s, 30s)); } break; } case ActionReactKind::ShockSpikes: { - if (xirand::GetRandomNumber(100) < 30 + lvlDiff && !PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_STUN)) + if (xirand::GetRandomNumber(100) < 30 + lvlDiff && !PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Stun)) { - PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_STUN, EFFECT_STUN, 1, 0s, 3s)); + PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Stun, static_cast(xi::StatusEffect::Stun), 1, 0s, 3s)); } break; } @@ -1298,34 +1298,34 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re Action->addEffectMessage = MsgBasic::None; Action->addEffectParam = 0; - EFFECT previous_daze = EFFECT_NONE; - uint16 previous_daze_power = 0; + xi::StatusEffect previous_daze = xi::StatusEffect::None; + uint16 previous_daze_power = 0; - if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_DRAIN_SAMBA) && PDefender->m_EcoSystem != ECOSYSTEM::UNDEAD) + if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DrainSamba) && PDefender->m_EcoSystem != ECOSYSTEM::UNDEAD) { - previous_daze = EFFECT_DRAIN_DAZE; - previous_daze_power = PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_DRAIN_SAMBA)->GetPower(); + previous_daze = xi::StatusEffect::DrainDaze; + previous_daze_power = PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::DrainSamba)->GetPower(); } - else if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_ASPIR_SAMBA)) + else if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AspirSamba)) { - previous_daze = EFFECT_ASPIR_DAZE; - previous_daze_power = PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_ASPIR_SAMBA)->GetPower(); + previous_daze = xi::StatusEffect::AspirDaze; + previous_daze_power = PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AspirSamba)->GetPower(); } - else if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_HASTE_SAMBA)) + else if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::HasteSamba)) { - previous_daze = EFFECT_HASTE_DAZE; - previous_daze_power = PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_HASTE_SAMBA)->GetPower(); + previous_daze = xi::StatusEffect::HasteDaze; + previous_daze_power = PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::HasteSamba)->GetPower(); } - if (previous_daze != EFFECT_NONE) + if (previous_daze != xi::StatusEffect::None) { if (PAttacker->objtype == TYPE_PC && PAttacker->PParty != nullptr) { for (auto* PMember : PAttacker->PParty->members) { - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_DRAIN_DAZE, PMember->id); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_HASTE_DAZE, PMember->id); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_ASPIR_DAZE, PMember->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::DrainDaze, PMember->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::HasteDaze, PMember->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::AspirDaze, PMember->id); } } else if (PAttacker->objtype == TYPE_TRUST && PAttacker->PMaster) @@ -1334,17 +1334,17 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re static_cast(PAttacker->PMaster)->ForPartyWithTrusts( [&](CBattleEntity* PMember) { - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_DRAIN_DAZE, PMember->id); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_HASTE_DAZE, PMember->id); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_ASPIR_DAZE, PMember->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::DrainDaze, PMember->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::HasteDaze, PMember->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::AspirDaze, PMember->id); }); // clang-format on } else { - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_DRAIN_DAZE, PAttacker->id); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_HASTE_DAZE, PAttacker->id); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_ASPIR_DAZE, PAttacker->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::DrainDaze, PAttacker->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::HasteDaze, PAttacker->id); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::AspirDaze, PAttacker->id); } if (PDefender->objtype == TYPE_PC) { @@ -1352,9 +1352,9 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re } else { - if (previous_daze == EFFECT_DRAIN_DAZE && PDefender->m_EcoSystem != ECOSYSTEM::UNDEAD) + if (previous_daze == xi::StatusEffect::DrainDaze && PDefender->m_EcoSystem != ECOSYSTEM::UNDEAD) { - PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_DRAIN_DAZE, 0, previous_daze_power, 0s, 10s, PAttacker->id), EffectNotice::Silent); + PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::DrainDaze, 0, previous_daze_power, 0s, 10s, PAttacker->id), EffectNotice::Silent); } else { @@ -1449,9 +1449,9 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re } else if (PAttacker->StatusEffectContainer->GetActiveRuneCount() > 0) // Rune Enhancement enspell damage, takes priority over all but blood weapon. { - EFFECT highestRuneEffect = PAttacker->StatusEffectContainer->GetHighestRuneEffect(); - EFFECT newestRuneEffect = PAttacker->StatusEffectContainer->GetNewestRuneEffect(); - int highestRuneCount = PAttacker->StatusEffectContainer->GetEffectsCount(highestRuneEffect); + xi::StatusEffect highestRuneEffect = PAttacker->StatusEffectContainer->GetHighestRuneEffect(); + xi::StatusEffect newestRuneEffect = PAttacker->StatusEffectContainer->GetNewestRuneEffect(); + int highestRuneCount = PAttacker->StatusEffectContainer->GetEffectsCount(highestRuneEffect); DAMAGE_TYPE damageType = DAMAGE_TYPE::NONE; int element = 0; @@ -1459,13 +1459,13 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re if (highestRuneCount == 1) // only have unique or one rune, set element to newest. { element = GetRuneEnhancementElement(newestRuneEffect); - Action->additionalEffect = enspell_subeffects[newestRuneEffect - EFFECT_IGNIS]; + Action->additionalEffect = enspell_subeffects[static_cast(newestRuneEffect) - static_cast(xi::StatusEffect::Ignis)]; damageType = GetRuneEnhancementDamageType(newestRuneEffect); } else // set element to strongest rune { element = GetRuneEnhancementElement(highestRuneEffect); - Action->additionalEffect = enspell_subeffects[highestRuneEffect - EFFECT_IGNIS]; + Action->additionalEffect = enspell_subeffects[static_cast(highestRuneEffect) - static_cast(xi::StatusEffect::Ignis)]; damageType = GetRuneEnhancementDamageType(highestRuneEffect); } @@ -1561,29 +1561,29 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re } else { - bool hasDrainDaze = PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_DRAIN_DAZE); - bool hasAspirDaze = PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_ASPIR_DAZE); - bool hasHasteDaze = PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_HASTE_DAZE); + bool hasDrainDaze = PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DrainDaze); + bool hasAspirDaze = PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AspirDaze); + bool hasHasteDaze = PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::HasteDaze); if (hasDrainDaze || hasAspirDaze || hasHasteDaze) { int32 delay = PAttacker->GetWeaponDelay(false) / 10; // TODO: What kind of value did this ACTUALLY expect? - EFFECT daze = EFFECT_NONE; - uint32 attackerID = 0; - uint16 power = 0; + xi::StatusEffect daze = xi::StatusEffect::None; + uint32 attackerID = 0; + uint16 power = 0; if (hasDrainDaze) { - daze = EFFECT_DRAIN_DAZE; + daze = xi::StatusEffect::DrainDaze; } else if (hasAspirDaze) { - daze = EFFECT_ASPIR_DAZE; + daze = xi::StatusEffect::AspirDaze; } else if (hasHasteDaze) { - daze = EFFECT_HASTE_DAZE; + daze = xi::StatusEffect::HasteDaze; } attackerID = PDefender->StatusEffectContainer->GetStatusEffect(daze)->GetSubID(); @@ -1626,7 +1626,7 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re } } - if (daze == EFFECT_DRAIN_DAZE && power > 0) + if (daze == xi::StatusEffect::DrainDaze && power > 0) { uint16 multiplier = (uint16)(3 + 5.5f * (power - 1)); int8 Samba = xirand::GetRandomNumber(1, (delay * multiplier) / 100 + 1); @@ -1667,7 +1667,7 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re PChar->updatemask |= UPDATE_HP; } } - else if (daze == EFFECT_ASPIR_DAZE && power > 0 && PDefender->GetMaxMP() > 0) + else if (daze == xi::StatusEffect::AspirDaze && power > 0 && PDefender->GetMaxMP() > 0) { uint16 multiplier = 1 + 2 * (power - 1); int8 Samba = xirand::GetRandomNumber(1, (delay * multiplier) / 100 + 1); @@ -1698,11 +1698,11 @@ void HandleEnspell(CBattleEntity* PAttacker, CBattleEntity* PDefender, action_re PChar->updatemask |= UPDATE_HP; } } - else if (daze == EFFECT_HASTE_DAZE && power > 0) + else if (daze == xi::StatusEffect::HasteDaze && power > 0) { Action->additionalEffect = ActionProcAddEffect::Haste; // Ability haste added in scripts\globals\effects\haste_samba_haste_effect.lua - PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_HASTE_SAMBA_HASTE, 0, power, 0s, 10s)); + PAttacker->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::HasteSambaHaste, 0, power, 0s, 10s)); // Status effect removed in CAttackRound constructor (i.e. after next attack round is calculated) } } @@ -1904,9 +1904,9 @@ auto CalculateTPFromDamageTaken(CBattleEntity* PAttacker, CBattleEntity* PDefend bool TryInterruptSpell(CBattleEntity* PAttacker, CBattleEntity* PDefender, CSpell* PSpell) { // Exceptions. - if (PDefender->objtype == TYPE_TRUST || // Caster is a trust. - PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_MANAFONT) || // Caster has Manafont. - (SKILLTYPE)PSpell->getSkillType() == SKILL_SINGING) // Spell is a song. + if (PDefender->objtype == TYPE_TRUST || // Caster is a trust. + PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Manafont) || // Caster has Manafont. + (SKILLTYPE)PSpell->getSkillType() == SKILL_SINGING) // Spell is a song. { return false; } @@ -1965,16 +1965,16 @@ bool TryInterruptSpell(CBattleEntity* PAttacker, CBattleEntity* PDefender, CSpel // You get interrupted. Handle aquaveil. if (chance < finalRatio) { - if (PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_AQUAVEIL)) + if (PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Aquaveil)) { - auto aquaCount = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_AQUAVEIL)->GetPower(); + auto aquaCount = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Aquaveil)->GetPower(); if (aquaCount - 1 == 0) // removes the status, but still prevents the interrupt { - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_AQUAVEIL); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Aquaveil); } else { - PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_AQUAVEIL)->SetPower(aquaCount - 1); + PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Aquaveil)->SetPower(aquaCount - 1); } return false; } @@ -1994,13 +1994,13 @@ bool TryInterruptSpell(CBattleEntity* PAttacker, CBattleEntity* PDefender, CSpel int32 TakePhysicalDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, PHYSICAL_ATTACK_TYPE physicalAttackType, int32 damage, bool isBlocked, uint8 slot, uint16 tpMultiplier, CBattleEntity* taChar, bool giveTPtoVictim, bool giveTPtoAttacker, bool isCounter, bool isCovered, CBattleEntity* POriginalTarget) { auto* weapon = GetEntityWeapon(PAttacker, (SLOTTYPE)slot); - giveTPtoAttacker = giveTPtoAttacker && !PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_MEIKYO_SHISUI); + giveTPtoAttacker = giveTPtoAttacker && !PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::MeikyoShisui); giveTPtoVictim = giveTPtoVictim && physicalAttackType != PHYSICAL_ATTACK_TYPE::DAKEN; bool isRanged = (slot == SLOT_AMMO || slot == SLOT_RANGED); int32 baseDamage = damage; ATTACK_TYPE attackType = ATTACK_TYPE::PHYSICAL; DAMAGE_TYPE damageType = DAMAGE_TYPE::NONE; - if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_FORMLESS_STRIKES) && !isCounter) + if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::FormlessStrikes) && !isCounter) { attackType = ATTACK_TYPE::SPECIAL; uint8 formlessMod = 55; // Start at 55 @@ -2121,10 +2121,10 @@ int32 TakePhysicalDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, PHY } // Reprisal - if (damage > 0 && PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_REPRISAL)) + if (damage > 0 && PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Reprisal)) { // Reflect a portion of the blocked damage back. This is calculated before Stoneskin, Phalanx, Sentinel or Invincible - CStatusEffect* reprisalEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_REPRISAL); + CStatusEffect* reprisalEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Reprisal); if (reprisalEffect != nullptr) { @@ -2133,7 +2133,7 @@ int32 TakePhysicalDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, PHY int32 blockedDamage = (damage * (100 - absorb)) / 100; int32 spikesDamage = 0; - if (PDefender->StatusEffectContainer->HasStatusEffect({ EFFECT_INVINCIBLE, EFFECT_SENTINEL })) + if (PDefender->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Invincible, xi::StatusEffect::Sentinel })) { blockedDamage = (baseDamage * (100.0f - absorb)) / 100.0f; } @@ -2176,7 +2176,7 @@ int32 TakePhysicalDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, PHY if (damage > 0) { - PDefender->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DAMAGE); + PDefender->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Damage); // Check for bind breaking BindBreakCheck(PAttacker, PDefender); @@ -2290,9 +2290,9 @@ int32 TakeWeaponskillDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, bool isRanged = (slot == SLOT_AMMO || slot == SLOT_RANGED); if (attackType == ATTACK_TYPE::PHYSICAL && - PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_DEFENSE_BOOST) && - PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_DEFENSE_BOOST)->GetSubPower() != 0 && - infront(PAttacker->loc.p, PDefender->loc.p, PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_DEFENSE_BOOST)->GetSubPower())) + PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::DefenseBoost) && + PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::DefenseBoost)->GetSubPower() != 0 && + infront(PAttacker->loc.p, PDefender->loc.p, PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::DefenseBoost)->GetSubPower())) { damage = 0; } @@ -2338,7 +2338,7 @@ int32 TakeWeaponskillDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, if (damage > 0) { - PDefender->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DAMAGE); + PDefender->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Damage); // Check for bind breaking BindBreakCheck(PAttacker, PDefender); @@ -2407,9 +2407,9 @@ int32 TakeWeaponskillDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, PAttacker->addTP(std::max((PAttacker->getMod(Mod::SAVETP)), standbyTp)); // Remove Hagakure Effect if present - if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_HAGAKURE)) + if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hagakure)) { - PAttacker->StatusEffectContainer->DelStatusEffect(EFFECT_HAGAKURE); + PAttacker->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Hagakure); } return damage; @@ -2431,7 +2431,7 @@ void TakeSpellDamage(CBattleEntity* PDefender, CBattleEntity* PAttacker, CSpell* // Remove effects from damage if (PSpell->canTargetEnemy() && damage > 0) { - PDefender->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DAMAGE); + PDefender->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Damage); // Check for bind breaking BindBreakCheck(PAttacker, PDefender); @@ -2467,7 +2467,7 @@ int32 TakeSwipeLungeDamage(CBattleEntity* PDefender, CBattleEntity* PAttacker, i // Remove effects from damage if (damage > 0) { - PDefender->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DAMAGE); + PDefender->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Damage); // Check for bind breaking BindBreakCheck(PAttacker, PDefender); @@ -2489,8 +2489,8 @@ uint8 GetHitRateEx(CBattleEntity* PAttacker, CBattleEntity* PDefender, uint8 att { int32 hitrate = 75; - bool hasSneakAttack = PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK_ATTACK); - bool hasTrickAttack = PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_TRICK_ATTACK); + bool hasSneakAttack = PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SneakAttack); + bool hasTrickAttack = PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TrickAttack); bool isBehind = behind(PAttacker->loc.p, PDefender->loc.p, 64); bool hasAssassin = PAttacker->hasTrait(TRAIT_ASSASSIN); bool hasValidSneakAttack = hasSneakAttack && isBehind; @@ -2530,20 +2530,20 @@ uint8 GetHitRate(CBattleEntity* PAttacker, CBattleEntity* PDefender, uint8 attac uint8 GetCritHitRate(CBattleEntity* PAttacker, CBattleEntity* PDefender, bool ignoreSneakTrickAttack, SLOTTYPE weaponSlot) { int32 critHitRate = 5; - if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_MIGHTY_STRIKES, 0) || - PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_MIGHTY_STRIKES)) + if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::MightyStrikes, 0) || + PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::MightyStrikes)) { return 100; } - else if (PAttacker->objtype == TYPE_PC && (!ignoreSneakTrickAttack) && PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK_ATTACK)) + else if (PAttacker->objtype == TYPE_PC && (!ignoreSneakTrickAttack) && PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::SneakAttack)) { - if (behind(PAttacker->loc.p, PDefender->loc.p, 64) || PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_HIDE)) + if (behind(PAttacker->loc.p, PDefender->loc.p, 64) || PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hide)) { critHitRate = 100; } } else if (PAttacker->objtype == TYPE_PC && PAttacker->GetMJob() == JOB_THF && charutils::hasTrait((CCharEntity*)PAttacker, TRAIT_ASSASSIN) && - (!ignoreSneakTrickAttack) && PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_TRICK_ATTACK)) + (!ignoreSneakTrickAttack) && PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TrickAttack)) { CBattleEntity* taChar = battleutils::getAvailableTrickAttackChar(PAttacker, PDefender); if (taChar != nullptr) @@ -2577,14 +2577,14 @@ uint8 GetCritHitRate(CBattleEntity* PAttacker, CBattleEntity* PDefender, bool ig } // Check for Innin crit rate bonus from behind target - if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_INNIN) && behind(PAttacker->loc.p, PDefender->loc.p, 64)) + if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Innin) && behind(PAttacker->loc.p, PDefender->loc.p, 64)) { - critHitRate += PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_INNIN)->GetPower(); + critHitRate += PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Innin)->GetPower(); } // Check for Yonin enemy crit rate reduction while in front of target - if (PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_YONIN) && infront(PDefender->loc.p, PAttacker->loc.p, 64)) + if (PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Yonin) && infront(PDefender->loc.p, PAttacker->loc.p, 64)) { - critHitRate -= PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_YONIN)->GetPower(); + critHitRate -= PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Yonin)->GetPower(); } critHitRate += GetDexCritBonus(PAttacker, PDefender); @@ -2668,18 +2668,18 @@ uint8 GetRangedCritHitRate(CBattleEntity* PAttacker, CBattleEntity* PDefender) } // Check for Innin crit rate bonus from behind target - if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_INNIN) && behind(PAttacker->loc.p, PDefender->loc.p, 64)) + if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Innin) && behind(PAttacker->loc.p, PDefender->loc.p, 64)) { - critHitRate += PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_INNIN)->GetPower(); + critHitRate += PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Innin)->GetPower(); } // Check for Yonin enemy crit rate reduction while in front of target - if (PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_YONIN) && infront(PDefender->loc.p, PAttacker->loc.p, 64)) + if (PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Yonin) && infront(PDefender->loc.p, PAttacker->loc.p, 64)) { - critHitRate -= PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_YONIN)->GetPower(); + critHitRate -= PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Yonin)->GetPower(); } // Check for Mighty Strikes since Ranged Attacks do not get the crit bonus - critHitRate += PAttacker->getMod(Mod::CRITHITRATE) - (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_MIGHTY_STRIKES) ? 100 : 0); + critHitRate += PAttacker->getMod(Mod::CRITHITRATE) - (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::MightyStrikes) ? 100 : 0); critHitRate += GetAGICritBonus(PAttacker, PDefender); critHitRate -= PDefender->getMod(Mod::CRITICAL_HIT_EVASION); // Similar to merits. However, it can be possitive or negative. When mod is negative, it raises crit-hit-rate. @@ -3028,7 +3028,7 @@ uint8 CheckMultiHits(CBattleEntity* PEntity, CItemWeapon* PWeapon) // Hasso Zanshin bonus: requires HASSO_ZANSHIN_BONUS mod (applied by Hasso effect when SAM is main job) if (PEntity->getMod(Mod::HASSO_ZANSHIN_BONUS) > 0) { - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_HASSO)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hasso)) { uint16 zanshin = PEntity->getMod(Mod::ZANSHIN); if (PEntity->objtype == TYPE_PC) @@ -3087,10 +3087,10 @@ bool IsAbsorbByShadow(CBattleEntity* PDefender, CBattleEntity* PAttacker) switch (modShadow) { case Mod::UTSUSEMI: - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_COPY_IMAGE); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::CopyImage); break; case Mod::BLINK: - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_BLINK); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Blink); break; default: break; @@ -3100,18 +3100,18 @@ bool IsAbsorbByShadow(CBattleEntity* PDefender, CBattleEntity* PAttacker) { if (PDefender->objtype == TYPE_PC) { - CStatusEffect* PStatusEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_COPY_IMAGE); + CStatusEffect* PStatusEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::CopyImage); if (PStatusEffect != nullptr) { - uint16 icon = EFFECT_COPY_IMAGE_3; + uint16 icon = static_cast(xi::StatusEffect::CopyImage3); switch (Shadow) { case 1: - icon = EFFECT_COPY_IMAGE_1; + icon = static_cast(xi::StatusEffect::CopyImage); break; case 2: - icon = EFFECT_COPY_IMAGE_2; + icon = static_cast(xi::StatusEffect::CopyImage2); break; } // player loses 25 CE if attack absorbed by utsusemi shadow @@ -3198,13 +3198,13 @@ bool IsIntimidated(CBattleEntity* PAttacker, CBattleEntity* PDefender) } // Add intimidation rate from Bully - if (CStatusEffect* PDoubtEffect = PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_DOUBT)) + if (CStatusEffect* PDoubtEffect = PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Doubt)) { KillerEffect += PDoubtEffect->GetPower(); } // Add intimidation rate from Intimidate status effect - if (CStatusEffect* PIntimidateEffect = PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_INTIMIDATE)) + if (CStatusEffect* PIntimidateEffect = PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Intimidate)) { KillerEffect += PIntimidateEffect->GetPower(); } @@ -3348,15 +3348,15 @@ SKILLCHAIN_ELEMENT FormSkillchain(const std::list& resonance auto GetSkillChainEffect(const CBattleEntity* PDefender, uint8 primary, uint8 secondary, uint8 tertiary) -> ActionProcSkillChain { - CStatusEffect* PSCEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0); - CStatusEffect* PCBEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_CHAINBOUND, 0); + CStatusEffect* PSCEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0); + CStatusEffect* PCBEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Chainbound, 0); SKILLCHAIN_ELEMENT skillchain = SC_NONE; const auto combined_properties = primary | (secondary << 4) | (tertiary << 8); if (PSCEffect == nullptr && PCBEffect == nullptr) { // No effect exists, apply an effect using the weaponskill ID as the power with a tier of 0. - PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_SKILLCHAIN, 0, combined_properties, 0s, 10s, 0, 0, 0)); + PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Skillchain, 0, combined_properties, 0s, 10s, 0, 0, 0)); return ActionProcSkillChain::None; } @@ -3386,9 +3386,9 @@ auto GetSkillChainEffect(const CBattleEntity* PDefender, uint8 primary, uint8 se skillchain = FormSkillchain(resonanceProperties, skillProperties); } - PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_SKILLCHAIN, 0, combined_properties, 0s, 10s, 0, 0, 0)); - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_CHAINBOUND); - PSCEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0); + PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Skillchain, 0, combined_properties, 0s, 10s, 0, 0, 0)); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Chainbound); + PSCEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0); } // Previous effect exists else if (PSCEffect && PSCEffect->GetStartTime() + 3s < timer::now()) @@ -3675,7 +3675,7 @@ int32 TakeSkillchainDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, i return 0; } - CStatusEffect* PEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0); + CStatusEffect* PEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0); if (PEffect == nullptr) { @@ -3713,7 +3713,7 @@ int32 TakeSkillchainDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, i int32 damage = std::floor(closingDamage * skillchainLevel * skillchainBonus * skillchainDmgBonus * dayWeatherBonus * staffAffinity); auto* PChar = dynamic_cast(PAttacker); - if (PChar && PChar->StatusEffectContainer->HasStatusEffect(EFFECT_INNIN) && behind(PChar->loc.p, PDefender->loc.p, 64)) + if (PChar && PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Innin) && behind(PChar->loc.p, PDefender->loc.p, 64)) { damage = std::floor(static_cast(damage) * (1.0f + PChar->PMeritPoints->GetMeritValue(MERIT_INNIN_EFFECT, PChar) / 100.0f)); } @@ -3743,7 +3743,7 @@ int32 TakeSkillchainDamage(CBattleEntity* PAttacker, CBattleEntity* PDefender, i battleutils::ClaimMob(PDefender, PAttacker); PDefender->updatemask |= UPDATE_STATUS; - PDefender->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DAMAGE); + PDefender->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Damage); switch (PDefender->objtype) { @@ -3812,7 +3812,7 @@ void MakeEntityStandUp(CBattleEntity* PEntity) if (PPlayer->animation == ANIMATION_HEALING) { - PPlayer->StatusEffectContainer->DelStatusEffect(EFFECT_HEALING); + PPlayer->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Healing); PPlayer->updatemask |= UPDATE_HP; } else if (PPlayer->animation == ANIMATION_SIT || (PPlayer->animation >= ANIMATION_SITCHAIR_0 && PPlayer->animation <= ANIMATION_SITCHAIR_10)) @@ -3905,7 +3905,7 @@ bool HasNinjaTool(CBattleEntity* PEntity, CSpell* PSpell, bool ConsumeTool) // Should only make it to this point if a ninja tool was found. // Check For Futae Effect - bool hasFutae = PChar->StatusEffectContainer->HasStatusEffect(EFFECT_FUTAE); + bool hasFutae = PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Futae); // Futae only applies to Elemental Wheel Tools bool useFutae = (toolID == ITEMID::UCHITAKE || toolID == ITEMID::TSURARA || toolID == ITEMID::KAWAHORI_OGI || toolID == ITEMID::MAKIBISHI || toolID == ITEMID::HIRAISHIN || toolID == ITEMID::MIZU_DEPPO); @@ -3969,7 +3969,7 @@ CBattleEntity* getAvailableTrickAttackChar(CBattleEntity* taUser, CBattleEntity* { TracyZoneScoped; - if (!taUser->StatusEffectContainer->HasStatusEffect(EFFECT_TRICK_ATTACK)) + if (!taUser->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::TrickAttack)) { return nullptr; } @@ -4173,7 +4173,7 @@ void TransferEnmity(CBattleEntity* PHateReceiver, CBattleEntity* PHateGiver, CMo uint16 doSoulEaterEffect(CCharEntity* m_PChar, uint32 damage) { - if (m_PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SOULEATER)) + if (m_PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Souleater)) { // Souleater's HP consumed is 10% (base) + x% from gear (ONLY HIGHEST) + x% from gear augments. float souleaterBonus = m_PChar->getMaxGearMod(Mod::SOULEATER_EFFECT) * 0.01; @@ -4201,11 +4201,11 @@ uint16 doSoulEaterEffect(CCharEntity* m_PChar, uint32 damage) uint16 doConsumeManaEffect(CCharEntity* m_PChar) { auto bonusDmg = 0; - if (m_PChar->StatusEffectContainer->HasStatusEffect(EFFECT_CONSUME_MANA)) + if (m_PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::ConsumeMana)) { bonusDmg += (uint32)(floor(m_PChar->health.mp / 10)); m_PChar->health.mp = 0; - m_PChar->StatusEffectContainer->DelStatusEffect(EFFECT_CONSUME_MANA); + m_PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::ConsumeMana); } return bonusDmg; } @@ -4757,7 +4757,7 @@ int32 RangedDmgTaken(CBattleEntity* PDefender, int32 damage, DAMAGE_TYPE damageT void HandleIssekiganEnmityBonus(CBattleEntity* PDefender, CBattleEntity* PAttacker) { - if (PAttacker->objtype == TYPE_MOB && PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_ISSEKIGAN)) + if (PAttacker->objtype == TYPE_MOB && PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Issekigan)) { // Issekigan is Known to Grant 300 CE per parry, but unknown how it effects VE (per bgwiki). So VE is left alone for now. // JP is known to give 10 VE per point @@ -4769,18 +4769,18 @@ void HandleIssekiganEnmityBonus(CBattleEntity* PDefender, CBattleEntity* PAttack void HandleAfflatusMiseryAccuracyBonus(CBattleEntity* PAttacker) { - if (PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_AFFLATUS_MISERY) && PAttacker->StatusEffectContainer->HasStatusEffect(EFFECT_AUSPICE)) + if (PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AfflatusMisery) && PAttacker->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Auspice)) { // We keep track of the running total of Accuracy Bonus as part of the Sub Power of the Effect // This is used to re-adjust Mod::ACC when the effect wears off - uint16 accBonus = PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_AFFLATUS_MISERY)->GetSubPower(); + uint16 accBonus = PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AfflatusMisery)->GetSubPower(); // Per BGWiki, this bonus is thought to cap at +30 if (accBonus < 30) { accBonus = accBonus + 10; - PAttacker->StatusEffectContainer->GetStatusEffect(EFFECT_AFFLATUS_MISERY)->SetSubPower(accBonus); + PAttacker->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::AfflatusMisery)->SetSubPower(accBonus); // Update the Accuracy Modifer as well, so that this is reflected // throughout the battle system @@ -4791,7 +4791,7 @@ void HandleAfflatusMiseryAccuracyBonus(CBattleEntity* PAttacker) void HandleAfflatusMiseryDamage(CBattleEntity* PDefender, int32 damage) { - if (PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_AFFLATUS_MISERY) && damage > 0) + if (PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AfflatusMisery) && damage > 0) { PDefender->setModifier(Mod::AFFLATUS_MISERY, damage); } @@ -4844,7 +4844,7 @@ float HandleTranquilHeart(CBattleEntity* PEntity) void BindBreakCheck(CBattleEntity* PAttacker, CBattleEntity* PDefender) { - if (PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_BIND)) + if (PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bind)) { uint16 BindBreakChance = 950; // 0-1000 (100.0%) scale. Maybe change to a float later.. @@ -4856,7 +4856,7 @@ void BindBreakCheck(CBattleEntity* PAttacker, CBattleEntity* PDefender) if (BindBreakChance > xirand::GetRandomNumber(1000)) { - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_BIND); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Bind); } } } @@ -4865,7 +4865,7 @@ int32 HandleOneForAll(CBattleEntity* PDefender, int32 damage) { if (damage > 0) { - auto* PEffect = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_ONE_FOR_ALL); + auto* PEffect = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::OneForAll); if (PEffect != nullptr) { damage = std::max(damage - PEffect->GetPower(), 0); @@ -4885,7 +4885,7 @@ int32 HandleStoneskin(CBattleEntity* PDefender, int32 damage) return 0; } - PDefender->StatusEffectContainer->DelStatusEffect(EFFECT_STONESKIN); + PDefender->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Stoneskin); return damage - skin; } @@ -4894,15 +4894,15 @@ int32 HandleStoneskin(CBattleEntity* PDefender, int32 damage) auto HandleSevereDamage(CBattleEntity* PDefender, int32 damage, bool isPhysical) -> int32 { - damage = HandleSevereDamageEffect(PDefender, EFFECT_MIGAWARI, damage, true); + damage = HandleSevereDamageEffect(PDefender, xi::StatusEffect::Migawari, damage, true); // TODO: Earthen Armor effect // TODO: Sentinel's Scherzo effect if (isPhysical && PDefender->objtype == TYPE_PET && PDefender->getMod(Mod::AUTO_SCHURZEN) != 0 && damage >= PDefender->health.hp && - ((CPetEntity*)PDefender)->PMaster->StatusEffectContainer->GetEffectsCount(EFFECT_EARTH_MANEUVER) >= 1) + ((CPetEntity*)PDefender)->PMaster->StatusEffectContainer->GetEffectsCount(xi::StatusEffect::EarthManeuver) >= 1) { damage = PDefender->health.hp - 1; - ((CPetEntity*)PDefender)->PMaster->StatusEffectContainer->DelStatusEffectSilent(EFFECT_EARTH_MANEUVER); + ((CPetEntity*)PDefender)->PMaster->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::EarthManeuver); } return damage; @@ -4911,15 +4911,15 @@ auto HandleSevereDamage(CBattleEntity* PDefender, int32 damage, bool isPhysical) int32 HandleFanDance(CBattleEntity* PDefender, int32 damage) { // Handle Fan Dance - if (PDefender->StatusEffectContainer->HasStatusEffect(EFFECT_FAN_DANCE)) + if (PDefender->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::FanDance)) { - int power = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_FAN_DANCE)->GetPower(); + int power = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::FanDance)->GetPower(); float resist = 1.0f - (power / 10000.0f); damage = (int32)(damage * resist); if (power > 2000) { // reduce fan dance effectiveness by 10% each hit, to a min of 20% - PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_FAN_DANCE)->SetPower(power - 1000); + PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::FanDance)->SetPower(power - 1000); } } return damage; @@ -4928,7 +4928,7 @@ int32 HandleFanDance(CBattleEntity* PDefender, int32 damage) void HandleScarletDelirium(CBattleEntity* PDefender, int32 damage) { // Check for Scarlet Delirium and update Effect Power with bonus from damage - CStatusEffect* effectScarDel = PDefender->StatusEffectContainer->GetStatusEffect(EFFECT_SCARLET_DELIRIUM); + CStatusEffect* effectScarDel = PDefender->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::ScarletDelirium); // Damage bonus calculation, update Effect Power if (effectScarDel && effectScarDel->GetPower() == 0) @@ -4940,12 +4940,12 @@ void HandleScarletDelirium(CBattleEntity* PDefender, int32 damage) auto duration = 90s + std::chrono::seconds(jpValue); // Convert status effect from "Absorb damage" mode to "Provide damage bonus" mode - PDefender->StatusEffectContainer->DelStatusEffectSilent(EFFECT_SCARLET_DELIRIUM); - PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_SCARLET_DELIRIUM_1, EFFECT_SCARLET_DELIRIUM_1, power, 0s, duration), EffectNotice::Silent); + PDefender->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::ScarletDelirium); + PDefender->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::ScarletDelirium1, static_cast(xi::StatusEffect::ScarletDelirium1), power, 0s, duration), EffectNotice::Silent); } } -auto HandleSevereDamageEffect(CBattleEntity* PDefender, EFFECT effect, int32 damage, bool removeEffect) -> int32 +auto HandleSevereDamageEffect(CBattleEntity* PDefender, xi::StatusEffect effect, int32 damage, bool removeEffect) -> int32 { if (PDefender->StatusEffectContainer->HasStatusEffect(effect)) { @@ -5051,35 +5051,35 @@ auto GetWeather(CBattleEntity* PEntity, bool ignoreScholar, Weather zoneWeather) if (!ignoreScholar) // Do not need to check for status effects if we're ignoring scholar spells { - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_FIRESTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Firestorm)) { scholarSpell = Weather::HotSpell; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_RAINSTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Rainstorm)) { scholarSpell = Weather::Rain; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_SANDSTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sandstorm)) { scholarSpell = Weather::DustStorm; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_WINDSTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Windstorm)) { scholarSpell = Weather::Wind; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_HAILSTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Hailstorm)) { scholarSpell = Weather::Snow; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_THUNDERSTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Thunderstorm)) { scholarSpell = Weather::Thunder; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_AURORASTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Aurorastorm)) { scholarSpell = Weather::Auroras; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_VOIDSTORM)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Voidstorm)) { scholarSpell = Weather::Gloom; } @@ -5448,7 +5448,7 @@ int16 GetRangedDelayReduction(CBattleEntity* battleEntity, int16 delay) SnapShotReductionPercent = std::min(SnapShotReductionPercent, 70); // Cap of 70% auto VelocityShotReductionPercent = 0; - if (battleEntity->StatusEffectContainer->HasStatusEffect(EFFECT_VELOCITY_SHOT)) + if (battleEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::VelocityShot)) { VelocityShotReductionPercent = 15 + battleEntity->getMod(Mod::VELOCITY_SNAPSHOT_BONUS); } @@ -5472,7 +5472,7 @@ int32 GetRangedAttackBonuses(CBattleEntity* battleEntity) int32 bonus = 0; // bonus from velocity shot mod - if (battleEntity->StatusEffectContainer->HasStatusEffect(EFFECT_VELOCITY_SHOT)) + if (battleEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::VelocityShot)) { bonus += battleEntity->getMod(Mod::VELOCITY_RATT_BONUS); } @@ -5496,7 +5496,7 @@ int32 GetRangedAccuracyBonuses(CBattleEntity* battleEntity) int32 bonus = 0; // Bonus from barrage mod - if (battleEntity->StatusEffectContainer->HasStatusEffect(EFFECT_BARRAGE)) + if (battleEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Barrage)) { bonus += battleEntity->getMod(Mod::BARRAGE_ACC); } @@ -5634,14 +5634,14 @@ timer::duration CalculateSpellCastTime(CBattleEntity* PEntity, CMagicState* PMag auto base = PSpell->getCastTime(); auto cast = base; - if (PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_HASSO, EFFECT_SEIGAN })) + if (PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Hasso, xi::StatusEffect::Seigan })) { cast = std::chrono::floor(cast * 1.5); } if (PSpell->getSpellGroup() == SPELLGROUP_BLACK) { - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_ALACRITY)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Alacrity)) { uint16 bonus = 0; // Only apply Alacrity/celerity mod if the spell element matches the weather. @@ -5671,7 +5671,7 @@ timer::duration CalculateSpellCastTime(CBattleEntity* PEntity, CMagicState* PMag } else if (applyArts) { - if (PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_DARK_ARTS, EFFECT_ADDENDUM_BLACK })) + if (PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::DarkArts, xi::StatusEffect::AddendumBlack })) { // Add any "Grimoire: Reduces spellcasting time" bonuses cast = std::chrono::floor(cast * (1.0f + (PEntity->getMod(Mod::BLACK_MAGIC_CAST) + PEntity->getMod(Mod::GRIMOIRE_SPELLCASTING)) / 100.0f)); @@ -5684,7 +5684,7 @@ timer::duration CalculateSpellCastTime(CBattleEntity* PEntity, CMagicState* PMag } else if (PSpell->getSpellGroup() == SPELLGROUP_WHITE) { - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_CELERITY)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Celerity)) { uint16 bonus = 0; // Only apply Alacrity/celerity mod if the spell element matches the weather. @@ -5706,7 +5706,7 @@ timer::duration CalculateSpellCastTime(CBattleEntity* PEntity, CMagicState* PMag } else if (applyArts) { - if (PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_LIGHT_ARTS, EFFECT_ADDENDUM_WHITE })) + if (PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::LightArts, xi::StatusEffect::AddendumWhite })) { // Add any "Grimoire: Reduces spellcasting time" bonuses cast = std::chrono::floor(cast * (1.0f + (PEntity->getMod(Mod::WHITE_MAGIC_CAST) + PEntity->getMod(Mod::GRIMOIRE_SPELLCASTING)) / 100.0f)); @@ -5738,14 +5738,14 @@ timer::duration CalculateSpellCastTime(CBattleEntity* PEntity, CMagicState* PMag } else if (PSpell->getSpellGroup() == SPELLGROUP_SONG) { - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_PIANISSIMO)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Pianissimo)) { if (PSpell->getAOE() == SPELLAOE_PIANISSIMO) { cast = base / 2; } } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_NIGHTINGALE)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Nightingale)) { if (PEntity->objtype == TYPE_PC && xirand::GetRandomNumber(100) < ((CCharEntity*)PEntity)->PMeritPoints->GetMeritValue(MERIT_NIGHTINGALE, (CCharEntity*)PEntity) - 25) @@ -5754,7 +5754,7 @@ timer::duration CalculateSpellCastTime(CBattleEntity* PEntity, CMagicState* PMag } cast = std::chrono::floor(cast * 0.5f); } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_TROUBADOUR)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Troubadour)) { cast = std::chrono::floor(cast * 1.5f); } @@ -5829,12 +5829,12 @@ uint16 CalculateSpellCost(CBattleEntity* PEntity, CSpell* PSpell) if (PSpell->getSpellGroup() == SPELLGROUP_BLACK) { - if (PSpell->getAOE() == SPELLAOE_RADIAL_MANI && PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_MANIFESTATION)) + if (PSpell->getAOE() == SPELLAOE_RADIAL_MANI && PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Manifestation)) { cost *= 2; applyArts = false; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_PARSIMONY)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Parsimony)) { cost /= 2; applyArts = false; @@ -5846,12 +5846,12 @@ uint16 CalculateSpellCost(CBattleEntity* PEntity, CSpell* PSpell) } else if (PSpell->getSpellGroup() == SPELLGROUP_WHITE) { - if (PSpell->getAOE() == SPELLAOE_RADIAL_ACCE && PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_ACCESSION)) + if (PSpell->getAOE() == SPELLAOE_RADIAL_ACCE && PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Accession)) { cost *= 2; applyArts = false; } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_PENURY)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Penury)) { cost /= 2; applyArts = false; @@ -5883,7 +5883,7 @@ bool CanAffordSpell(CBattleEntity* PEntity, CSpell* PSpell, uint8 flags) } // Check if entity bypasses MP costs - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_MANAFONT) || + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Manafont) || (flags & MAGICFLAGS_IGNORE_MP)) { return true; @@ -5942,7 +5942,7 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) if (PSpell->getSpellGroup() == SPELLGROUP_SONG) { - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_NIGHTINGALE)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Nightingale)) { recast = std::chrono::floor(recast * 0.5f); } @@ -5965,12 +5965,12 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) recast -= std::chrono::seconds(PEntity->getMod(Mod::SONG_RECAST_DELAY)); } - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_COMPOSURE)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Composure)) { recast = std::chrono::floor(recast * 1.25f); } - if (PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_HASSO, EFFECT_SEIGAN })) + if (PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::Hasso, xi::StatusEffect::Seigan })) { recast = std::chrono::floor(recast * 1.5f); } @@ -6002,7 +6002,7 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) // Light/Dark arts recast bonus/penalties applies after other bonuses if (PSpell->getSpellGroup() == SPELLGROUP_BLACK) { - if (PSpell->getAOE() == SPELLAOE_RADIAL_MANI && PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_MANIFESTATION)) + if (PSpell->getAOE() == SPELLAOE_RADIAL_MANI && PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Manifestation)) { if (PEntity->GetMJob() == JOB_SCH) { @@ -6013,7 +6013,7 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) recast *= 3; } } - else if (PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_DARK_ARTS, EFFECT_ADDENDUM_BLACK })) + else if (PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::DarkArts, xi::StatusEffect::AddendumBlack })) { // Add any "Grimoire: Reduces spellcasting time" bonuses + Dark Arts bonus recast = std::chrono::floor(recast * ((100.0f + PEntity->getMod(Mod::BLACK_MAGIC_RECAST) + PEntity->getMod(Mod::GRIMOIRE_SPELLCASTING)) / 100.0f)); @@ -6026,7 +6026,7 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) recast = std::max(recast, recastCapFloor(recastReductionCap)); // https://www.bg-wiki.com/ffxi/Alacrity - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_ALACRITY)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Alacrity)) { recast = std::chrono::floor(recast * 0.60); // 40% reduction from Alacrity alone recast = std::max(recast, recastCapFloor(alacrityCelerityRecastReductionCap)); @@ -6043,7 +6043,7 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) } else if (PSpell->getSpellGroup() == SPELLGROUP_WHITE) { - if (PSpell->getAOE() == SPELLAOE_RADIAL_ACCE && PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_ACCESSION)) + if (PSpell->getAOE() == SPELLAOE_RADIAL_ACCE && PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Accession)) { if (PEntity->GetMJob() == JOB_SCH) { @@ -6055,7 +6055,7 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) } } - if (PEntity->StatusEffectContainer->HasStatusEffect({ EFFECT_LIGHT_ARTS, EFFECT_ADDENDUM_WHITE })) + if (PEntity->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::LightArts, xi::StatusEffect::AddendumWhite })) { // Add any "Grimoire: Reduces spellcasting time" bonuses + Light Arts bonus recast = std::chrono::floor(recast * ((100.0f + PEntity->getMod(Mod::WHITE_MAGIC_RECAST) + PEntity->getMod(Mod::GRIMOIRE_SPELLCASTING)) / 100.0f)); @@ -6068,7 +6068,7 @@ timer::duration CalculateSpellRecastTime(CBattleEntity* PEntity, CSpell* PSpell) recast = std::max(recast, recastCapFloor(recastReductionCap)); // https://www.bg-wiki.com/ffxi/Celerity - if (PEntity->StatusEffectContainer->HasStatusEffect(EFFECT_CELERITY)) + if (PEntity->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Celerity)) { recast = std::chrono::floor(recast * 0.60); // 40% reduction from Celerity alone recast = std::max(recast, recastCapFloor(alacrityCelerityRecastReductionCap)); @@ -6294,50 +6294,50 @@ DAMAGE_TYPE GetEnspellDamageType(ENSPELL enspellType) } } -DAMAGE_TYPE GetRuneEnhancementDamageType(EFFECT runeEffect) +auto GetRuneEnhancementDamageType(xi::StatusEffect runeEffect) -> DAMAGE_TYPE { switch (runeEffect) { - case EFFECT_IGNIS: + case xi::StatusEffect::Ignis: return DAMAGE_TYPE::FIRE; - case EFFECT_GELUS: + case xi::StatusEffect::Gelus: return DAMAGE_TYPE::ICE; - case EFFECT_FLABRA: + case xi::StatusEffect::Flabra: return DAMAGE_TYPE::WIND; - case EFFECT_TELLUS: + case xi::StatusEffect::Tellus: return DAMAGE_TYPE::EARTH; - case EFFECT_SULPOR: + case xi::StatusEffect::Sulpor: return DAMAGE_TYPE::LIGHTNING; - case EFFECT_UNDA: + case xi::StatusEffect::Unda: return DAMAGE_TYPE::WATER; - case EFFECT_LUX: + case xi::StatusEffect::Lux: return DAMAGE_TYPE::LIGHT; - case EFFECT_TENEBRAE: + case xi::StatusEffect::Tenebrae: return DAMAGE_TYPE::DARK; default: return DAMAGE_TYPE::NONE; } } -ELEMENT GetRuneEnhancementElement(EFFECT runeEffect) +auto GetRuneEnhancementElement(xi::StatusEffect runeEffect) -> ELEMENT { switch (runeEffect) { - case EFFECT_IGNIS: + case xi::StatusEffect::Ignis: return ELEMENT_FIRE; - case EFFECT_GELUS: + case xi::StatusEffect::Gelus: return ELEMENT_ICE; - case EFFECT_FLABRA: + case xi::StatusEffect::Flabra: return ELEMENT_WIND; - case EFFECT_TELLUS: + case xi::StatusEffect::Tellus: return ELEMENT_EARTH; - case EFFECT_SULPOR: + case xi::StatusEffect::Sulpor: return ELEMENT_THUNDER; - case EFFECT_UNDA: + case xi::StatusEffect::Unda: return ELEMENT_WATER; - case EFFECT_LUX: + case xi::StatusEffect::Lux: return ELEMENT_LIGHT; - case EFFECT_TENEBRAE: + case xi::StatusEffect::Tenebrae: return ELEMENT_DARK; default: return ELEMENT_NONE; @@ -6355,7 +6355,7 @@ CBattleEntity* GetCoverAbilityUser(CBattleEntity* PCoverAbilityTarget, CBattleEn for (auto* PMember : PCoverAbilityTarget->PParty->members) { if (coverAbilityTargetID == PMember->GetLocalVar("COVER_ABILITY_TARGET") && - PMember->StatusEffectContainer->HasStatusEffect(EFFECT_COVER) && + PMember->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Cover) && PMember->isAlive()) { PCoverAbilityUser = PMember; @@ -6413,7 +6413,7 @@ float CheckLiementAbsorb(CBattleEntity* PBattleEntity, DAMAGE_TYPE DamageType) { if (PBattleEntity) { - auto* liementEffect = PBattleEntity->StatusEffectContainer->GetStatusEffect(EFFECT_LIEMENT, 0); + auto* liementEffect = PBattleEntity->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Liement, 0); if (liementEffect) { @@ -6435,7 +6435,7 @@ float CheckLiementAbsorb(CBattleEntity* PBattleEntity, DAMAGE_TYPE DamageType) if (runeAbsorbCount > 0) { - PBattleEntity->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LIEMENT); // Liement absorbs once and disappears. + PBattleEntity->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Liement); // Liement absorbs once and disappears. float absorbMultiplier = (85 + runeAbsorbCount * absorbPower) / 100.0; return absorbMultiplier * -1; diff --git a/src/map/utils/battleutils.h b/src/map/utils/battleutils.h index df837e70dd8..00346c614bd 100644 --- a/src/map/utils/battleutils.h +++ b/src/map/utils/battleutils.h @@ -218,7 +218,7 @@ int32 CheckAndApplyDamageCap(int32 damage, CBattleEntity* PDefender); void HandleIssekiganEnmityBonus(CBattleEntity* PDefender, CBattleEntity* PAttacker); auto HandleSevereDamage(CBattleEntity* PDefender, int32 damage, bool isPhysical) -> int32; -auto HandleSevereDamageEffect(CBattleEntity* PDefender, EFFECT effect, int32 damage, bool removeEffect) -> int32; +auto HandleSevereDamageEffect(CBattleEntity* PDefender, xi::StatusEffect effect, int32 damage, bool removeEffect) -> int32; void HandleTacticalParry(CBattleEntity* PEntity); void HandleTacticalGuard(CBattleEntity* PEntity); @@ -265,8 +265,8 @@ int32 GetMeritValue(CBattleEntity*, MERIT_TYPE); int32 GetScaledItemModifier(CBattleEntity*, CItemEquipment*, Mod); auto GetSpikesDamageType(ActionReactKind spikesType) -> DAMAGE_TYPE; DAMAGE_TYPE GetEnspellDamageType(ENSPELL enspellType); -DAMAGE_TYPE GetRuneEnhancementDamageType(EFFECT runeEffect); -ELEMENT GetRuneEnhancementElement(EFFECT runeEffect); +auto GetRuneEnhancementDamageType(xi::StatusEffect runeEffect) -> DAMAGE_TYPE; +auto GetRuneEnhancementElement(xi::StatusEffect runeEffect) -> ELEMENT; CBattleEntity* GetCoverAbilityUser(CBattleEntity* PCoverAbilityTarget, CBattleEntity* PMob); bool IsMagicCovered(CCharEntity* PCoverAbilityUser); diff --git a/src/map/utils/charutils.cpp b/src/map/utils/charutils.cpp index b769083b33d..adc9d22789f 100644 --- a/src/map/utils/charutils.cpp +++ b/src/map/utils/charutils.cpp @@ -2248,7 +2248,7 @@ void UnequipItem(CCharEntity* PChar, uint8 equipSlotID, Recalculate recalculate) PChar->look.sub = 0; PChar->m_Weapons[SLOT_SUB] = xi::items::unarmed(); // << equips "nothing" in the sub slot to prevent multi attack exploit PChar->health.tp = 0; - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_AFTERMATH); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Aftermath); BuildingCharWeaponSkills(PChar); UpdateWeaponStyle(PChar, equipSlotID, nullptr); } @@ -2273,7 +2273,7 @@ void UnequipItem(CCharEntity* PChar, uint8 equipSlotID, Recalculate recalculate) if (((CItemWeapon*)PItem)->getSkillType() != SKILL_STRING_INSTRUMENT && ((CItemWeapon*)PItem)->getSkillType() != SKILL_WIND_INSTRUMENT) { PChar->health.tp = 0; - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_AFTERMATH); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Aftermath); } BuildingCharWeaponSkills(PChar); UpdateWeaponStyle(PChar, equipSlotID, nullptr); @@ -2311,7 +2311,7 @@ void UnequipItem(CCharEntity* PChar, uint8 equipSlotID, Recalculate recalculate) } PChar->health.tp = 0; - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_AFTERMATH); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Aftermath); BuildingCharWeaponSkills(PChar); UpdateWeaponStyle(PChar, equipSlotID, nullptr); } @@ -3418,7 +3418,7 @@ void EquipItem(CCharEntity* PChar, uint8 slotID, uint8 equipSlotID, uint8 contai { // If the weapon ISN'T a wind based instrument or a string based instrument PChar->health.tp = 0; - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_AFTERMATH); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Aftermath); } if (!PChar->getEquip(SLOT_MAIN) || !PChar->getEquip(SLOT_MAIN)->isType(ITEM_EQUIPMENT) || @@ -3739,9 +3739,9 @@ void BuildingCharAbilityTable(CCharEntity* PChar) bool isArtsBonusActive(CCharEntity* PChar, SKILLTYPE SkillID) { return (SkillID >= SKILL_DIVINE_MAGIC && SkillID <= SKILL_ENFEEBLING_MAGIC && - PChar->StatusEffectContainer->HasStatusEffect({ EFFECT_LIGHT_ARTS, EFFECT_ADDENDUM_WHITE })) || + PChar->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::LightArts, xi::StatusEffect::AddendumWhite })) || (SkillID >= SKILL_ENFEEBLING_MAGIC && SkillID <= SKILL_DARK_MAGIC && - PChar->StatusEffectContainer->HasStatusEffect({ EFFECT_DARK_ARTS, EFFECT_ADDENDUM_BLACK })); + PChar->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::DarkArts, xi::StatusEffect::AddendumBlack })); } // calculates the bonus skill based on active sch arts @@ -3799,7 +3799,7 @@ int16 ArtsBonusSkill(CCharEntity* PChar, SKILLTYPE SkillID) skillBonus += std::max(artsSkill - currentSkill, 0); } - if (PChar->StatusEffectContainer->HasStatusEffect({ EFFECT_LIGHT_ARTS, EFFECT_ADDENDUM_WHITE })) + if (PChar->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::LightArts, xi::StatusEffect::AddendumWhite })) { skillBonus += PChar->getMod(Mod::LIGHT_ARTS_SKILL); } @@ -5010,12 +5010,12 @@ void DistributeExperiencePoints(CCharEntity* PChar, CMobEntity* PMob) } bool isInSignetZone = - PMember->StatusEffectContainer->HasStatusEffect(EFFECT_SIGNET) && + PMember->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Signet) && region >= REGION_TYPE::RONFAURE && region <= REGION_TYPE::JEUNO; bool isInSanctionZone = - PMember->StatusEffectContainer->HasStatusEffect(EFFECT_SANCTION) && + PMember->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sanction) && region >= REGION_TYPE::WEST_AHT_URHGAN && region <= REGION_TYPE::ALZADAAL; @@ -5397,9 +5397,9 @@ uint16 AddCapacityBonus(CCharEntity* PChar, uint16 capacityPoints) // COMMITMENT from Capacity Bands - if (PChar->StatusEffectContainer->GetStatusEffect(EFFECT_COMMITMENT) && PChar->loc.zone->GetRegionID() != REGION_TYPE::ABYSSEA) + if (PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Commitment) && PChar->loc.zone->GetRegionID() != REGION_TYPE::ABYSSEA) { - CStatusEffect* commitment = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_COMMITMENT); + CStatusEffect* commitment = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Commitment); int16 percentage = commitment->GetPower(); int16 cap = commitment->GetSubPower(); rawBonus += std::clamp(((capacityPoints * percentage) / 100), 0, cap); @@ -5407,7 +5407,7 @@ uint16 AddCapacityBonus(CCharEntity* PChar, uint16 capacityPoints) if (cap <= 0) { - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_COMMITMENT); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Commitment); } } @@ -5714,14 +5714,14 @@ void AddExperiencePoints(bool expFromRaise, bool awardRegionPoints, bool fromScr REGION_TYPE region = PChar->loc.zone->GetRegionID(); // Should this user be awarded conquest points.. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SIGNET) && (region >= REGION_TYPE::RONFAURE && region <= REGION_TYPE::JEUNO)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Signet) && (region >= REGION_TYPE::RONFAURE && region <= REGION_TYPE::JEUNO)) { // Add influence for the players region.. conquest::AddConquestPoints(PChar, exp); } // Should this user be awarded imperial standing.. - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SANCTION) && (region >= REGION_TYPE::WEST_AHT_URHGAN && region <= REGION_TYPE::ALZADAAL)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sanction) && (region >= REGION_TYPE::WEST_AHT_URHGAN && region <= REGION_TYPE::ALZADAAL)) { charutils::AddPoints(PChar, "imperial_standing", (int32)(exp * 0.1f)); PChar->pushPacket(PChar); @@ -6736,9 +6736,9 @@ float AddExpBonus(CCharEntity* PChar, float exp) TracyZoneScoped; int32 bonus = 0; - if (PChar->StatusEffectContainer->GetStatusEffect(EFFECT_DEDICATION) && PChar->loc.zone->GetRegionID() != REGION_TYPE::ABYSSEA) + if (PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Dedication) && PChar->loc.zone->GetRegionID() != REGION_TYPE::ABYSSEA) { - CStatusEffect* dedication = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_DEDICATION); + CStatusEffect* dedication = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Dedication); int16 percentage = dedication->GetPower(); int16 cap = dedication->GetSubPower(); bonus += std::clamp((int32)((exp * percentage) / 100), 0, cap); @@ -6746,7 +6746,7 @@ float AddExpBonus(CCharEntity* PChar, float exp) if (cap <= 0) { - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_DEDICATION); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Dedication); } } @@ -6894,7 +6894,7 @@ auto CheckAbilityAddtype(CCharEntity* PChar, const CAbility* PAbility) -> bool } if (PAbility->getAddType() & ADDTYPE_ASTRAL_FLOW) { - if (!PChar->StatusEffectContainer->HasStatusEffect(EFFECT_ASTRAL_FLOW)) + if (!PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::AstralFlow)) { return false; } @@ -6908,14 +6908,14 @@ auto CheckAbilityAddtype(CCharEntity* PChar, const CAbility* PAbility) -> bool } if (PAbility->getAddType() & ADDTYPE_LIGHT_ARTS) { - if (!PChar->StatusEffectContainer->HasStatusEffect({ EFFECT_LIGHT_ARTS, EFFECT_ADDENDUM_WHITE })) + if (!PChar->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::LightArts, xi::StatusEffect::AddendumWhite })) { return false; } } if (PAbility->getAddType() & ADDTYPE_DARK_ARTS) { - if (!PChar->StatusEffectContainer->HasStatusEffect({ EFFECT_DARK_ARTS, EFFECT_ADDENDUM_BLACK })) + if (!PChar->StatusEffectContainer->HasStatusEffect({ xi::StatusEffect::DarkArts, xi::StatusEffect::AddendumBlack })) { return false; } @@ -6970,7 +6970,7 @@ void RemoveInvisible(const CCharEntity* PChar) { if (PChar && PChar->StatusEffectContainer) { - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_INVISIBLE); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Invisible); } } @@ -6979,31 +6979,31 @@ void RemoveStratagems(CCharEntity* PChar, CSpell* PSpell) if (PSpell->getSpellGroup() == SPELLGROUP_WHITE) { // rapture to be deleted in applicable scripts - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_PENURY); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_CELERITY); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_ENLIGHTENMENT); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_ALTRUISM); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_TRANQUILITY); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Penury); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Celerity); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Enlightenment); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Altruism); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Tranquility); if (PSpell->getAOE() == SPELLAOE_RADIAL_ACCE) { - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_ACCESSION); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Accession); } if (PSpell->getSkillType() == SKILL_ENHANCING_MAGIC) { - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_PERPETUANCE); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Perpetuance); } } else if (PSpell->getSpellGroup() == SPELLGROUP_BLACK) { // ebullience to be deleted in applicable scripts - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_PARSIMONY); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_ALACRITY); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_ENLIGHTENMENT); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_FOCALIZATION); - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_EQUANIMITY); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Parsimony); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Alacrity); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Enlightenment); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Focalization); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Equanimity); if (PSpell->getAOE() == SPELLAOE_RADIAL_MANI) { - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_MANIFESTATION); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::Manifestation); } } } @@ -7104,13 +7104,13 @@ void ReloadParty(CCharEntity* PChar) } CBattleEntity* PSyncTarget = PChar->PParty->GetSyncTarget(); - if (PSyncTarget && PChar->getZone() == PSyncTarget->getZone() && !(PChar->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC)) && - PSyncTarget->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC) && - PSyncTarget->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_SYNC)->GetDuration() == 0s) + if (PSyncTarget && PChar->getZone() == PSyncTarget->getZone() && !(PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync)) && + PSyncTarget->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync) && + PSyncTarget->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelSync)->GetDuration() == 0s) { PChar->pushPacket(PChar, PChar, 0, PSyncTarget->GetMLevel(), MsgBasic::LevelSyncActivated); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DISPELABLE); - PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_LEVEL_SYNC, EFFECT_LEVEL_SYNC, PSyncTarget->GetMLevel(), 0s, 0s), EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Dispelable); + PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::LevelSync, static_cast(xi::StatusEffect::LevelSync), PSyncTarget->GetMLevel(), 0s, 0s), EffectNotice::Silent); } if (allianceid != 0) @@ -7441,8 +7441,8 @@ auto HomePoint(CCharEntity* PChar, bool resetHPMP) -> bool if (resetHPMP) { // remove weakness on homepoint - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_WEAKNESS); - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_SYNC); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Weakness); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelSync); PChar->SetDeathTime(timer::time_point::min()); diff --git a/src/map/utils/fishingutils.cpp b/src/map/utils/fishingutils.cpp index 58c8bd28779..cc79bb38665 100644 --- a/src/map/utils/fishingutils.cpp +++ b/src/map/utils/fishingutils.cpp @@ -1615,7 +1615,7 @@ int32 CatchMonster(CCharEntity* PChar, uint32 MobID) // PMob->SetLocalVar("QuestBattleID", PChar->GetLocalVar("QuestBattleID")); // PChar->StatusEffectContainer->CopyConfrontationEffect(PMob); - if ((mob->log < 255 && mob->quest < 255) || mob->questOnly || (PMob->m_TrueDetection && PMob->getMobMod(MOBMOD_DETECTION) & DETECT_SCENT) || !PChar->StatusEffectContainer->HasStatusEffect(EFFECT_SNEAK)) + if ((mob->log < 255 && mob->quest < 255) || mob->questOnly || (PMob->m_TrueDetection && PMob->getMobMod(MOBMOD_DETECTION) & DETECT_SCENT) || !PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Sneak)) { PMob->PAI->Engage(PChar->targid); battleutils::ClaimMob(PMob, (CBattleEntity*)PChar); diff --git a/src/map/utils/mountutils.cpp b/src/map/utils/mountutils.cpp index 14bfa852ad1..748d1af3cdd 100644 --- a/src/map/utils/mountutils.cpp +++ b/src/map/utils/mountutils.cpp @@ -35,7 +35,7 @@ namespace mountutils // CustomProperties[1] is used for Noble Chocobo, and is set to 1. auto packetDefinition(const CCharEntity* PChar) -> MountPacketDefinition { - const auto* effect = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_MOUNTED); + const auto* effect = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Mounted); if (!effect) { return MountPacketDefinition{ diff --git a/src/map/utils/petutils.cpp b/src/map/utils/petutils.cpp index cb6275ad88a..1fdd7311bc0 100644 --- a/src/map/utils/petutils.cpp +++ b/src/map/utils/petutils.cpp @@ -1162,7 +1162,7 @@ void CalculateLuopanStats(CBattleEntity* PMaster, CPetEntity* PPet) PPet->SetMLevel(PMaster->GetMLevel()); PPet->health.maxhp = (uint32)floor((250 * PPet->GetMLevel()) / 15); - if (PMaster->StatusEffectContainer->HasStatusEffect(EFFECT_BOLSTER)) + if (PMaster->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Bolster)) { uint8 bolsterJPVal = static_cast(PMaster)->PJobPoints->GetJobPointValue(JP_BOLSTER_EFFECT); PPet->health.maxhp += (uint32)floor(PPet->health.maxhp * (0.03 * bolsterJPVal)); @@ -1239,17 +1239,17 @@ void SetupPetWithMaster(CBattleEntity* PMaster, CPetEntity* PPet) // clang-format on } - if (PMaster->StatusEffectContainer->HasStatusEffect(EFFECT_DEBILITATION)) + if (PMaster->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Debilitation)) { - PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_DEBILITATION, EFFECT_DEBILITATION, PMaster->StatusEffectContainer->GetStatusEffect(EFFECT_DEBILITATION)->GetPower(), 0s, PMaster->StatusEffectContainer->GetStatusEffect(EFFECT_DEBILITATION)->GetDuration()), EffectNotice::Silent); + PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Debilitation, static_cast(xi::StatusEffect::Debilitation), PMaster->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Debilitation)->GetPower(), 0s, PMaster->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Debilitation)->GetDuration()), EffectNotice::Silent); } - if (PMaster->StatusEffectContainer->HasStatusEffect(EFFECT_OMERTA)) + if (PMaster->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Omerta)) { - PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_OMERTA, EFFECT_OMERTA, PMaster->StatusEffectContainer->GetStatusEffect(EFFECT_OMERTA)->GetPower(), 0s, PMaster->StatusEffectContainer->GetStatusEffect(EFFECT_OMERTA)->GetDuration()), EffectNotice::Silent); + PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Omerta, static_cast(xi::StatusEffect::Omerta), PMaster->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Omerta)->GetPower(), 0s, PMaster->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Omerta)->GetDuration()), EffectNotice::Silent); } - if (PMaster->StatusEffectContainer->HasStatusEffect(EFFECT_IMPAIRMENT)) + if (PMaster->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Impairment)) { - PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_IMPAIRMENT, EFFECT_IMPAIRMENT, PMaster->StatusEffectContainer->GetStatusEffect(EFFECT_IMPAIRMENT)->GetPower(), 0s, PMaster->StatusEffectContainer->GetStatusEffect(EFFECT_IMPAIRMENT)->GetDuration()), EffectNotice::Silent); + PPet->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::Impairment, static_cast(xi::StatusEffect::Impairment), PMaster->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Impairment)->GetPower(), 0s, PMaster->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Impairment)->GetDuration()), EffectNotice::Silent); } } diff --git a/src/map/utils/puppetutils.cpp b/src/map/utils/puppetutils.cpp index 5945b14dfd6..d2975511db0 100644 --- a/src/map/utils/puppetutils.cpp +++ b/src/map/utils/puppetutils.cpp @@ -648,12 +648,12 @@ void TrySkillUP(CAutomatonEntity* PAutomaton, SKILLTYPE SkillID, uint8 lvl) } } -void CheckAttachmentsForManeuver(const CCharEntity* PChar, const EFFECT maneuver, const bool gain) +void CheckAttachmentsForManeuver(const CCharEntity* PChar, const xi::StatusEffect maneuver, const bool gain) { auto* PAutomaton = dynamic_cast(PChar->PPet); if (PAutomaton) { - uint8 element = maneuver - EFFECT_FIRE_MANEUVER; + uint8 element = static_cast(static_cast(maneuver) - static_cast(xi::StatusEffect::FireManeuver)); for (uint8 i = 0; i < 12; i++) { if (PAutomaton->getAttachment(i) != 0) @@ -707,7 +707,7 @@ void UpdateAttachments(const CCharEntity* PChar) if (PAttachment) { - int32 maneuver = EFFECT_FIRE_MANEUVER; + int32 maneuver = static_cast(xi::StatusEffect::FireManeuver); for (int j = 0; j < 8; j++) { if (PAttachment->getElementSlots() >> (j * 4) & 0xF) @@ -716,7 +716,7 @@ void UpdateAttachments(const CCharEntity* PChar) break; } } - luautils::OnUpdateAttachment(PAutomaton, PAttachment, PChar->StatusEffectContainer->GetEffectsCount(static_cast(maneuver))); + luautils::OnUpdateAttachment(PAutomaton, PAttachment, PChar->StatusEffectContainer->GetEffectsCount(static_cast(maneuver))); } } } diff --git a/src/map/utils/puppetutils.h b/src/map/utils/puppetutils.h index 69f0a49ced4..4b98ff94256 100644 --- a/src/map/utils/puppetutils.h +++ b/src/map/utils/puppetutils.h @@ -37,7 +37,7 @@ void setFrame(CCharEntity* PChar, AutomatonFrame frame); void setHead(CCharEntity* PChar, AutomatonHead head); auto getSkillCap(const CCharEntity* PChar, SKILLTYPE skill, uint8 level) -> uint16; void TrySkillUP(CAutomatonEntity* PAutomaton, SKILLTYPE SkillID, uint8 lvl); -void CheckAttachmentsForManeuver(const CCharEntity* PChar, EFFECT maneuver, bool gain); +void CheckAttachmentsForManeuver(const CCharEntity* PChar, xi::StatusEffect maneuver, bool gain); void EquipAttachments(CAutomatonEntity* PAutomaton); void UpdateAttachments(const CCharEntity* PChar); void PreLevelRestriction(const CCharEntity* PChar); diff --git a/src/map/zone.cpp b/src/map/zone.cpp index cebe4f135a4..4a4e7d10e75 100644 --- a/src/map/zone.cpp +++ b/src/map/zone.cpp @@ -637,31 +637,31 @@ void CZone::updateCharLevelRestriction(CCharEntity* PChar) { TracyZoneScoped; - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_RESTRICTION)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelRestriction)) { // If the level restriction is already the same then no need to change it - CStatusEffect* statusEffect = PChar->StatusEffectContainer->GetStatusEffect(EFFECT_LEVEL_RESTRICTION); + CStatusEffect* statusEffect = PChar->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::LevelRestriction); if (statusEffect == nullptr || statusEffect->GetPower() == m_levelRestriction) { return; } - PChar->StatusEffectContainer->DelStatusEffect(EFFECT_LEVEL_RESTRICTION); + PChar->StatusEffectContainer->DelStatusEffect(xi::StatusEffect::LevelRestriction); } if (m_levelRestriction != 0) { // remove buffs in level cap zones as well (such as riverne sites) - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_DISPELABLE, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ERASABLE, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ATTACK, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ON_ZONE, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_SONG, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ROLL, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_SYNTH_SUPPORT, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_BLOODPACT, EffectNotice::Silent); - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_RERAISE); - PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_LEVEL_RESTRICTION, EFFECT_LEVEL_RESTRICTION, m_levelRestriction, 0s, 0s)); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Dispelable, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Erasable, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Attack, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::OnZone, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Song, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Roll, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::SynthSupport, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Bloodpact, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Reraise); + PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::LevelRestriction, static_cast(xi::StatusEffect::LevelRestriction), m_levelRestriction, 0s, 0s)); } } @@ -846,7 +846,7 @@ void CZone::IncreaseZoneCounter(CCharEntity* PChar) createZoneTimers(); } - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_ON_ZONE_PATHOS, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::OnZonePathos, EffectNotice::Silent); CharZoneIn(PChar); } @@ -1091,17 +1091,17 @@ void CZone::CharZoneIn(CCharEntity* PChar) if (PChar->isMounted() && !CanUseMisc(MISC_MOUNT)) { PChar->animation = ANIMATION_NONE; - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_MOUNTED); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Mounted); } - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_COSTUME)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Costume)) { - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_COSTUME); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Costume); } - if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_ILLUSION)) + if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::Illusion)) { - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_ILLUSION); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::Illusion); } PChar->ReloadPartyInc(); @@ -1134,11 +1134,11 @@ void CZone::CharZoneIn(CCharEntity* PChar) if (m_BattlefieldHandler) { auto* PBattlefield = m_BattlefieldHandler->GetBattlefield(PChar, true); - if (PBattlefield != nullptr && PChar->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_CONFRONTATION)) + if (PBattlefield != nullptr && PChar->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Confrontation)) { PBattlefield->InsertEntity(PChar, CBattlefield::hasPlayerEntered(PChar)); } - else if (PChar->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_CONFRONTATION)) + else if (PChar->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Confrontation)) { // Player is in a zone with a battlefield but they are not part of one. if (CBattlefield::hasPlayerEntered(PChar)) @@ -1150,31 +1150,31 @@ void CZone::CharZoneIn(CCharEntity* PChar) else { // Is not inside of a battlefield arena so remove the battlefield effect - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); updateCharLevelRestriction(PChar); if (PChar->PPet) { - PChar->PPet->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->PPet->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); } } } } - else if (PChar->StatusEffectContainer->HasStatusEffectByFlag(EFFECTFLAG_CONFRONTATION)) + else if (PChar->StatusEffectContainer->HasStatusEffectByFlag(xi::StatusEffectFlag::Confrontation)) { // Player is zoning into a zone that does not have a battlefield but the player has a confrontation effect - remove it - PChar->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); if (PChar->PPet) { - PChar->PPet->StatusEffectContainer->DelStatusEffectsByFlag(EFFECTFLAG_CONFRONTATION, EffectNotice::Silent); + PChar->PPet->StatusEffectContainer->DelStatusEffectsByFlag(xi::StatusEffectFlag::Confrontation, EffectNotice::Silent); } } - else if (PChar->StatusEffectContainer->HasStatusEffect(EFFECT_LEVEL_SYNC)) + else if (PChar->StatusEffectContainer->HasStatusEffect(xi::StatusEffect::LevelSync)) { // Logging in with no party and a level sync status = bad. if (!PChar->PParty) { - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_SYNC); - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_RESTRICTION); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelSync); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelRestriction); } } @@ -1269,8 +1269,8 @@ void CZone::CharZoneOut(CCharEntity* PChar) } } } - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_SYNC); - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_RESTRICTION); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelSync); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelRestriction); } if (PChar->PTreasurePool != nullptr) // TODO: Condition for eliminating problems with MobHouse, we need to solve it once and for all! diff --git a/src/map/zone_instance.cpp b/src/map/zone_instance.cpp index 745de512907..7c29c8f00a8 100644 --- a/src/map/zone_instance.cpp +++ b/src/map/zone_instance.cpp @@ -160,7 +160,7 @@ void CZoneInstance::DecreaseZoneCounter(CCharEntity* PChar) PInstance->DecreaseZoneCounter(PChar); PInstance->DespawnPC(PChar); CharZoneOut(PChar); - PChar->StatusEffectContainer->DelStatusEffectSilent(EFFECT_LEVEL_RESTRICTION); + PChar->StatusEffectContainer->DelStatusEffectSilent(xi::StatusEffect::LevelRestriction); PChar->PInstance = nullptr; if (PInstance->CharListEmpty()) @@ -228,7 +228,7 @@ void CZoneInstance::IncreaseZoneCounter(CCharEntity* PChar) if (PChar->PInstance->GetLevelCap() > 0) { - PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(EFFECT_LEVEL_RESTRICTION, EFFECT_LEVEL_RESTRICTION, PChar->PInstance->GetLevelCap(), 0s, 0s)); + PChar->StatusEffectContainer->AddStatusEffect(new CStatusEffect(xi::StatusEffect::LevelRestriction, static_cast(xi::StatusEffect::LevelRestriction), PChar->PInstance->GetLevelCap(), 0s, 0s)); } if (PChar->PInstance->CheckFirstEntry(PChar->id)) diff --git a/src/test/lua/helpers/lua_client_entity_pair_actions.cpp b/src/test/lua/helpers/lua_client_entity_pair_actions.cpp index 5a51f410bc4..8bb4cb2f118 100644 --- a/src/test/lua/helpers/lua_client_entity_pair_actions.cpp +++ b/src/test/lua/helpers/lua_client_entity_pair_actions.cpp @@ -697,7 +697,7 @@ void CLuaClientEntityPairActions::skillchain(CLuaBaseEntity* target, sol::variad if (i >= 1) { - if (!PMob->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0)) + if (!PMob->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0)) { TestError("Skillchain effect not found after weaponskill #{}", i + 1); } @@ -708,7 +708,7 @@ void CLuaClientEntityPairActions::skillchain(CLuaBaseEntity* target, sol::variad parent_->simulation()->skipTime(3); // Backdate skillchain effect to bypass 3s timing window for next WS - if (auto* scEffect = PMob->StatusEffectContainer->GetStatusEffect(EFFECT_SKILLCHAIN, 0)) + if (auto* scEffect = PMob->StatusEffectContainer->GetStatusEffect(xi::StatusEffect::Skillchain, 0)) { scEffect->SetStartTime(timer::now() - 5s); } diff --git a/src/test/lua/helpers/lua_client_entity_pair_bcnm.cpp b/src/test/lua/helpers/lua_client_entity_pair_bcnm.cpp index 22680c043a8..09fc7f14f0d 100644 --- a/src/test/lua/helpers/lua_client_entity_pair_bcnm.cpp +++ b/src/test/lua/helpers/lua_client_entity_pair_bcnm.cpp @@ -170,7 +170,7 @@ void CLuaClientEntityPairBCNM::enter(const sol::object& npcQuery, const uint16 b std::ignore = parent_->entities().gotoAndTrigger(npcQuery, expectedEvent); } - if (!parent_->hasStatusEffect(EFFECT_BATTLEFIELD, sol::lua_nil)) + if (!parent_->hasStatusEffect(xi::StatusEffect::Battlefield, sol::lua_nil)) { TestError("Battlefield effect not found."); return; diff --git a/src/test/lua/lua_test_entity_assertions.cpp b/src/test/lua/lua_test_entity_assertions.cpp index b34a9960d31..288f4178b57 100644 --- a/src/test/lua/lua_test_entity_assertions.cpp +++ b/src/test/lua/lua_test_entity_assertions.cpp @@ -209,11 +209,11 @@ auto CLuaTestEntityAssertions::hasLocalVar(const std::string& varName, uint32 ex * Notes : ************************************************************************/ -auto CLuaTestEntityAssertions::hasEffect(const EFFECT effectId) -> CLuaTestEntityAssertions& +auto CLuaTestEntityAssertions::hasEffect(const xi::StatusEffect effectId) -> CLuaTestEntityAssertions& { assertCondition(entity_->hasStatusEffect(effectId, sol::lua_nil), - std::format("Expected entity to have status effect {}", getEnumKey("xi.effect", effectId)), - std::format("Expected entity to NOT have status effect {}", getEnumKey("xi.effect", effectId))); + std::format("Expected entity to have status effect {}", getEnumKey("xi.effect", static_cast(effectId))), + std::format("Expected entity to NOT have status effect {}", getEnumKey("xi.effect", static_cast(effectId)))); return *this; } diff --git a/src/test/lua/lua_test_entity_assertions.h b/src/test/lua/lua_test_entity_assertions.h index 3fb797481a7..799261efe15 100644 --- a/src/test/lua/lua_test_entity_assertions.h +++ b/src/test/lua/lua_test_entity_assertions.h @@ -25,11 +25,12 @@ #include "common/lua.h" #include +#include "data/enums/status_effect.h" + enum class QuestLog : uint8_t; enum class MissionLog : uint8_t; enum class KeyItem : uint16_t; enum ZONEID : uint16; -enum EFFECT : uint16; enum class Mod; class CLuaTestEntity; @@ -41,7 +42,7 @@ class CLuaTestEntityAssertions auto inZone(ZONEID expectedZone) -> CLuaTestEntityAssertions&; auto hasLocalVar(const std::string& varName, uint32 expectedValue) -> CLuaTestEntityAssertions&; - auto hasEffect(EFFECT effectId) -> CLuaTestEntityAssertions&; + auto hasEffect(xi::StatusEffect effectId) -> CLuaTestEntityAssertions&; auto hasAnimation(uint8 animation) -> CLuaTestEntityAssertions&; auto hasNationRank(uint8 expectedRank) -> CLuaTestEntityAssertions&; auto hasKI(KeyItem keyItemId) -> CLuaTestEntityAssertions&; diff --git a/tools/codegen/templates/enum.h.j2 b/tools/codegen/templates/enum.h.j2 index 7c963719b33..2c0b9b048b2 100644 --- a/tools/codegen/templates/enum.h.j2 +++ b/tools/codegen/templates/enum.h.j2 @@ -19,11 +19,11 @@ enum class {{ cls_name }} : {{ underlying }} {{ "%-*s"|format(enum_width, cpp_names[key]) }} = {{ "0x%08x"|format(val) if is_flags else val }}, {% endfor %} }; +} // namespace xi {% if is_flags %} using namespace magic_enum::bitwise_operators; {% endif %} -} // namespace xi namespace xi::data {