DarkflameServer/dScripts/ai/FV/FvFlyingCreviceDragon.cpp

109 lines
2.5 KiB
C++
Raw Permalink Normal View History

#include "FvFlyingCreviceDragon.h"
#include "GameMessages.h"
#include "EntityManager.h"
#include "SkillComponent.h"
#include "GeneralUtils.h"
#include "RenderComponent.h"
2022-07-28 13:39:57 +00:00
void FvFlyingCreviceDragon::OnStartup(Entity* self) {
self->AddTimer("waypoint", 5);
}
2022-07-28 13:39:57 +00:00
void FvFlyingCreviceDragon::OnTimerDone(Entity* self, std::string timerName) {
if (timerName == "waypoint") {
auto point = self->GetVar<int32_t>(u"waypoint");
2022-07-28 13:39:57 +00:00
if (point >= 20) {
point = 0;
}
2022-07-28 13:39:57 +00:00
self->SetVar<int32_t>(u"waypoint", point + 1);
2022-07-28 13:39:57 +00:00
self->AddTimer("waypoint", 5);
2022-07-28 13:39:57 +00:00
OnArrived(self);
2022-07-28 13:39:57 +00:00
return;
}
2022-07-28 13:39:57 +00:00
std::string groupName = "";
2022-07-28 13:39:57 +00:00
if (timerName == "platform1attack") {
groupName = "dragonFireballs1";
} else if (timerName == "platform3attack") {
groupName = "dragonFireballs3";
}
2022-07-28 13:39:57 +00:00
const auto& group = EntityManager::Instance()->GetEntitiesInGroup(groupName);
2022-07-28 13:39:57 +00:00
if (group.empty()) {
return;
}
2022-07-28 13:39:57 +00:00
auto* skillComponent = group[0]->GetComponent<SkillComponent>();
2022-07-28 13:39:57 +00:00
if (skillComponent != nullptr) {
skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY, true);
}
2022-07-28 13:39:57 +00:00
auto minionCount = 1;
for (size_t i = 1; i < group.size(); i++) {
if (minionCount == 4) {
return;
}
2022-07-28 13:39:57 +00:00
if (/*GeneralUtils::GenerateRandomNumber<int32_t>(1, 5) > 3*/ true) {
skillComponent = group[i]->GetComponent<SkillComponent>();
2022-07-28 13:39:57 +00:00
if (skillComponent != nullptr) {
skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY);
2022-07-28 13:39:57 +00:00
++minionCount;
}
}
}
}
2022-07-28 13:39:57 +00:00
void FvFlyingCreviceDragon::OnArrived(Entity* self) {
auto point = self->GetVar<int32_t>(u"waypoint");
if (point == 4) {
RenderComponent::PlayAnimation(self, u"attack1", 2.0f);
2022-07-28 13:39:57 +00:00
self->AddTimer("platform1attack", 1.75f);
} else if (point == 12) {
RenderComponent::PlayAnimation(self, u"attack2", 2.0f);
2022-07-28 13:39:57 +00:00
const auto& group2 = EntityManager::Instance()->GetEntitiesInGroup("dragonFireballs2");
if (group2.empty()) {
return;
}
auto* skillComponent = group2[0]->GetComponent<SkillComponent>();
if (skillComponent != nullptr) {
skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY);
}
auto minionCount = 1;
for (size_t i = 1; i < group2.size(); i++) {
if (minionCount == 4) {
return;
}
if (GeneralUtils::GenerateRandomNumber<int32_t>(1, 5) > 3) {
skillComponent = group2[i]->GetComponent<SkillComponent>();
if (skillComponent != nullptr) {
skillComponent->CalculateBehavior(762, 12506, LWOOBJID_EMPTY, true);
++minionCount;
}
}
}
} else if (point == 16) {
RenderComponent::PlayAnimation(self, u"attack3", 2.0f);
2022-07-28 13:39:57 +00:00
self->AddTimer("platform3attack", 0.5f);
}
}