1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 06:27:45 +00:00
sapphire/src/world/Action/ActionResultBuilder.h
Mimi 7bfd9538c9
[3.x] WIP: Initial Action and StatusEffect implementation (#958)
* Check statuses to determine valid lut entry

* Add duration field to statuses

* Rename buildEffects to make more sense

* Add basic generic handler for applying statuseffects

* Add more modifiers

* Add basic modifier impl for Chara

* Apply/remove modifiers for statuseffects

* Add some example statuses to lut

* Fix windows build error

* Don't clear tick effect

* Add status entry for Maim

* Apply status effects properly for self when having a target

* Fix hasStatusEffect to prevent duplicates

* Basic dot/hot ticks implemented

* Update HP on tick effects

* Apply effect to correct target

* Add method to simplify applying statuses to self

* Add job actions for warrior

* Add some actions and statuses for war

* Add even more modifiers

* Add statuseffect cost type

* Add option to not send statusremove order

* Change delModifier assert to return early instead

* Add option for scripts to enable the generic/lut handler

* Add enums for common action values

* fix indentation

* Fix modifier name for Defiance

* Remove status tick logging

* Move modifiers to statuseffect

* Add ParryPercent modifier

* Remove wrath when Defiance ends

* Apply modifiers in applyStatus

* Remove unused method

* Persistence for cross-class skills

* Add flags to StatusEffects

* Some exd struct fixes

* Some aoe work

* Add flags to lut

* Add missing changeclass

* Add SET_STATUS_ME to ActionIntegrity

* Improve offensive action check

* Add flag to overloaded applyStatusEffectSelf

* indentation fix

* Some calculation work

* Null-check ActionResultBuilder

---------

Co-authored-by: Lucy <44952533+Skyliegirl33@users.noreply.github.com>
Co-authored-by: Mordred <30826167+SapphireMordred@users.noreply.github.com>
2024-06-21 12:27:01 +10:00

54 lines
No EOL
2.4 KiB
C++

#pragma once
#include <ForwardsZone.h>
#include <Common.h>
#include "ActionLut.h"
namespace Sapphire::World::Action
{
class ActionResultBuilder
{
public:
ActionResultBuilder( Entity::CharaPtr source, uint32_t actionId, uint32_t resultId, uint16_t requestId );
void heal( Entity::CharaPtr& effectTarget, Entity::CharaPtr& healingTarget, uint32_t amount,
Common::CalcResultType hitType = Common::CalcResultType::TypeRecoverMp,
Common::ActionResultFlag flag = Common::ActionResultFlag::None );
void restoreMP( Entity::CharaPtr& effectTarget, Entity::CharaPtr& restoringTarget, uint32_t amount,
Common::ActionResultFlag flag = Common::ActionResultFlag::None );
void damage( Entity::CharaPtr& effectTarget, Entity::CharaPtr& damagingTarget, uint32_t amount,
Common::CalcResultType hitType = Common::CalcResultType::TypeDamageHp,
Common::ActionResultFlag flag = Common::ActionResultFlag::None );
void startCombo( Entity::CharaPtr& target, uint16_t actionId );
void comboSucceed( Entity::CharaPtr& target );
void applyStatusEffect( Entity::CharaPtr& target, uint16_t statusId, uint32_t duration, uint8_t param, bool shouldOverride = false );
void applyStatusEffect( Entity::CharaPtr& target, uint16_t statusId, uint32_t duration, uint8_t param,
std::vector< World::Action::StatusModifier > modifiers, uint32_t flag = 0, bool shouldOverride = false );
void applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, bool shouldOverride = false );
void applyStatusEffectSelf( uint16_t statusId, uint32_t duration, uint8_t param, std::vector< World::Action::StatusModifier > modifiers,
uint32_t flag = 0, bool shouldOverride = false );
void mount( Entity::CharaPtr& target, uint16_t mountId );
void sendActionResults( const std::vector< Entity::CharaPtr >& targetList );
private:
void addResultToActor( Entity::CharaPtr& chara, ActionResultPtr result );
Network::Packets::FFXIVPacketBasePtr createActionResultPacket( const std::vector< Entity::CharaPtr >& targetList );
private:
uint32_t m_actionId;
uint16_t m_requestId;
uint32_t m_resultId;
Entity::CharaPtr m_sourceChara;
std::unordered_map< Entity::CharaPtr, std::vector< ActionResultPtr > > m_actorResultsMap;
};
}