feat: implement consume item behavior (#1098)

* feature: implement consume item behavior

* Cleanup

* tested with skill 456 and fixed some things

* remove logs
This commit is contained in:
Aaron Kimbrell
2023-11-14 19:38:52 -06:00
committed by GitHub
parent 8a9883c224
commit 8cd5bf7b8d
6 changed files with 63 additions and 22 deletions

View File

@@ -64,6 +64,7 @@
#include "FallSpeedBehavior.h"
#include "ChangeIdleFlagsBehavior.h"
#include "DarkInspirationBehavior.h"
#include "ConsumeItemBehavior.h"
//CDClient includes
#include "CDBehaviorParameterTable.h"
@@ -200,7 +201,9 @@ Behavior* Behavior::CreateBehavior(const uint32_t behaviorId) {
case BehaviorTemplates::BEHAVIOR_SKILL_EVENT:
behavior = new SkillEventBehavior(behaviorId);
break;
case BehaviorTemplates::BEHAVIOR_CONSUME_ITEM: break;
case BehaviorTemplates::BEHAVIOR_CONSUME_ITEM:
behavior = new ConsumeItemBehavior(behaviorId);
break;
case BehaviorTemplates::BEHAVIOR_SKILL_CAST_FAILED:
behavior = new SkillCastFailedBehavior(behaviorId);
break;

View File

@@ -16,6 +16,7 @@ set(DGAME_DBEHAVIORS_SOURCES "AirMovementBehavior.cpp"
"ChangeOrientationBehavior.cpp"
"ChargeUpBehavior.cpp"
"ClearTargetBehavior.cpp"
"ConsumeItemBehavior.cpp"
"DamageAbsorptionBehavior.cpp"
"DamageReductionBehavior.cpp"
"DarkInspirationBehavior.cpp"

View File

@@ -0,0 +1,31 @@
#include "ConsumeItemBehavior.h"
#include "BehaviorContext.h"
#include "BehaviorBranchContext.h"
#include "InventoryComponent.h"
void ConsumeItemBehavior::Handle(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) {
auto action_to_cast = m_ActionNotConsumed;
if (this->m_ConsumeLOT != -1) {
auto caster = Game::entityManager->GetEntity(context->caster);
if (!caster) return;
auto inventoryComponent = caster->GetComponent<InventoryComponent>();
if (!inventoryComponent) return;
if (inventoryComponent->RemoveItem(this->m_ConsumeLOT, this->m_NumToConsume, eInventoryType::INVALID, false, true)){
action_to_cast = m_ActionConsumed;
}
}
if(action_to_cast) action_to_cast->Handle(context, bitStream, branch);
}
void ConsumeItemBehavior::Sync(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) {
Handle(context, bitStream, branch);
}
void ConsumeItemBehavior::Load() {
this->m_ConsumeLOT = GetInt("consume_lot", -1);
this->m_NumToConsume = GetInt("num_to_consume", 1);
this->m_ActionNotConsumed = GetAction("action_not_consumed");
this->m_ActionConsumed = GetAction("action_consumed");
}

View File

@@ -0,0 +1,17 @@
#pragma once
#include "Behavior.h"
class ConsumeItemBehavior final : public Behavior
{
public:
explicit ConsumeItemBehavior(const uint32_t behaviorId) : Behavior(behaviorId) {}
void Handle(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) override;
void Sync(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) override;
void Load() override;
private:
LOT m_ConsumeLOT;
uint32_t m_NumToConsume;
Behavior* m_ActionNotConsumed;
Behavior* m_ActionConsumed;
};