mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-08-04 17:54:01 +00:00
Imminuty updates (#925)
* WIP Immunities * Immunity getters * remove redundent variable replace it use with it's equivalent * remove unused lookups, fix typos * fix tests * added imunity test * address feedback * more immunity tests * explicit this
This commit is contained in:
@@ -6,28 +6,47 @@
|
||||
#include "Game.h"
|
||||
#include "dLogger.h"
|
||||
#include "DestroyableComponent.h"
|
||||
#include "ControllablePhysicsComponent.h"
|
||||
|
||||
void ImmunityBehavior::Handle(BehaviorContext* context, RakNet::BitStream* bitStream, const BehaviorBranchContext branch) {
|
||||
auto* target = EntityManager::Instance()->GetEntity(branch.target);
|
||||
|
||||
if (target == nullptr) {
|
||||
if (!target) {
|
||||
Game::logger->Log("DamageAbsorptionBehavior", "Failed to find target (%llu)!", branch.target);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
auto* destroyable = static_cast<DestroyableComponent*>(target->GetComponent(COMPONENT_TYPE_DESTROYABLE));
|
||||
|
||||
if (destroyable == nullptr) {
|
||||
return;
|
||||
auto* destroyableComponent = target->GetComponent<DestroyableComponent>();
|
||||
if (destroyableComponent) {
|
||||
destroyableComponent->SetStatusImmunity(
|
||||
eStateChangeType::PUSH,
|
||||
this->m_ImmuneToBasicAttack,
|
||||
this->m_ImmuneToDamageOverTime,
|
||||
this->m_ImmuneToKnockback,
|
||||
this->m_ImmuneToInterrupt,
|
||||
this->m_ImmuneToSpeed,
|
||||
this->m_ImmuneToImaginationGain,
|
||||
this->m_ImmuneToImaginationLoss,
|
||||
this->m_ImmuneToQuickbuildInterrupt,
|
||||
this->m_ImmuneToPullToPoint
|
||||
);
|
||||
}
|
||||
|
||||
if (!this->m_immuneBasicAttack) {
|
||||
return;
|
||||
auto* controllablePhysicsComponent = target->GetComponent<ControllablePhysicsComponent>();
|
||||
if (controllablePhysicsComponent) {
|
||||
controllablePhysicsComponent->SetStunImmunity(
|
||||
eStateChangeType::PUSH,
|
||||
context->caster,
|
||||
this->m_ImmuneToStunAttack,
|
||||
this->m_ImmuneToStunEquip,
|
||||
this->m_ImmuneToStunInteract,
|
||||
this->m_ImmuneToStunJump,
|
||||
this->m_ImmuneToStunMove,
|
||||
this->m_ImmuneToStunTurn,
|
||||
this->m_ImmuneToStunUseItem
|
||||
);
|
||||
}
|
||||
|
||||
destroyable->PushImmunity();
|
||||
|
||||
context->RegisterTimerBehavior(this, branch, target->GetObjectID());
|
||||
}
|
||||
|
||||
@@ -38,21 +57,60 @@ void ImmunityBehavior::Calculate(BehaviorContext* context, RakNet::BitStream* bi
|
||||
void ImmunityBehavior::Timer(BehaviorContext* context, BehaviorBranchContext branch, const LWOOBJID second) {
|
||||
auto* target = EntityManager::Instance()->GetEntity(second);
|
||||
|
||||
if (target == nullptr) {
|
||||
if (!target) {
|
||||
Game::logger->Log("DamageAbsorptionBehavior", "Failed to find target (%llu)!", second);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
auto* destroyable = static_cast<DestroyableComponent*>(target->GetComponent(COMPONENT_TYPE_DESTROYABLE));
|
||||
|
||||
if (destroyable == nullptr) {
|
||||
return;
|
||||
auto* destroyableComponent = target->GetComponent<DestroyableComponent>();
|
||||
if (destroyableComponent) {
|
||||
destroyableComponent->SetStatusImmunity(
|
||||
eStateChangeType::POP,
|
||||
this->m_ImmuneToBasicAttack,
|
||||
this->m_ImmuneToDamageOverTime,
|
||||
this->m_ImmuneToKnockback,
|
||||
this->m_ImmuneToInterrupt,
|
||||
this->m_ImmuneToSpeed,
|
||||
this->m_ImmuneToImaginationGain,
|
||||
this->m_ImmuneToImaginationLoss,
|
||||
this->m_ImmuneToQuickbuildInterrupt,
|
||||
this->m_ImmuneToPullToPoint
|
||||
);
|
||||
}
|
||||
|
||||
auto* controllablePhysicsComponent = target->GetComponent<ControllablePhysicsComponent>();
|
||||
if (controllablePhysicsComponent) {
|
||||
controllablePhysicsComponent->SetStunImmunity(
|
||||
eStateChangeType::POP,
|
||||
context->caster,
|
||||
this->m_ImmuneToStunAttack,
|
||||
this->m_ImmuneToStunEquip,
|
||||
this->m_ImmuneToStunInteract,
|
||||
this->m_ImmuneToStunJump,
|
||||
this->m_ImmuneToStunMove,
|
||||
this->m_ImmuneToStunTurn,
|
||||
this->m_ImmuneToStunUseItem
|
||||
);
|
||||
}
|
||||
|
||||
destroyable->PopImmunity();
|
||||
}
|
||||
|
||||
void ImmunityBehavior::Load() {
|
||||
this->m_immuneBasicAttack = GetBoolean("immune_basic_attack");
|
||||
//Stun
|
||||
this->m_ImmuneToStunAttack = GetBoolean("immune_stun_attack", false);
|
||||
this->m_ImmuneToStunEquip = GetBoolean("immune_stun_equip", false);
|
||||
this->m_ImmuneToStunInteract = GetBoolean("immune_stun_interact", false);
|
||||
this->m_ImmuneToStunMove = GetBoolean("immune_stun_move", false);
|
||||
this->m_ImmuneToStunTurn = GetBoolean("immune_stun_rotate", false);
|
||||
|
||||
// Status
|
||||
this->m_ImmuneToBasicAttack = GetBoolean("immune_basic_attack", false);
|
||||
this->m_ImmuneToDamageOverTime = GetBoolean("immune_damage_over_time", false);
|
||||
this->m_ImmuneToKnockback = GetBoolean("immune_knockback", false);
|
||||
this->m_ImmuneToInterrupt = GetBoolean("immune_interrupt", false);
|
||||
this->m_ImmuneToSpeed = GetBoolean("immune_speed", false);
|
||||
this->m_ImmuneToImaginationGain = GetBoolean("immune_imagination_gain", false);
|
||||
this->m_ImmuneToImaginationLoss = GetBoolean("immune_imagination_loss", false);
|
||||
this->m_ImmuneToQuickbuildInterrupt = GetBoolean("immune_quickbuild_interrupts", false);
|
||||
this->m_ImmuneToPullToPoint = GetBoolean("immune_pulltopoint", false);
|
||||
}
|
||||
|
@@ -4,8 +4,6 @@
|
||||
class ImmunityBehavior final : public Behavior
|
||||
{
|
||||
public:
|
||||
uint32_t m_immuneBasicAttack;
|
||||
|
||||
/*
|
||||
* Inherited
|
||||
*/
|
||||
@@ -20,4 +18,25 @@ public:
|
||||
void Timer(BehaviorContext* context, BehaviorBranchContext branch, LWOOBJID second) override;
|
||||
|
||||
void Load() override;
|
||||
|
||||
private:
|
||||
// stuns
|
||||
bool m_ImmuneToStunAttack = false;
|
||||
bool m_ImmuneToStunEquip = false;
|
||||
bool m_ImmuneToStunInteract = false;
|
||||
bool m_ImmuneToStunJump = false; // Unused
|
||||
bool m_ImmuneToStunMove = false;
|
||||
bool m_ImmuneToStunTurn = false;
|
||||
bool m_ImmuneToStunUseItem = false; // Unused
|
||||
|
||||
//status
|
||||
bool m_ImmuneToBasicAttack = false;
|
||||
bool m_ImmuneToDamageOverTime = false;
|
||||
bool m_ImmuneToKnockback = false;
|
||||
bool m_ImmuneToInterrupt = false;
|
||||
bool m_ImmuneToSpeed = false;
|
||||
bool m_ImmuneToImaginationGain = false;
|
||||
bool m_ImmuneToImaginationLoss = false;
|
||||
bool m_ImmuneToQuickbuildInterrupt = false;
|
||||
bool m_ImmuneToPullToPoint = false; // Unused in cdclient, but used in client
|
||||
};
|
||||
|
Reference in New Issue
Block a user