DarkflameServer/dScripts/ai/FV/FvFlyingCreviceDragon.cpp
David Markowitz 8d37d9b681
Organize dScripts (#814)
* Organize dScripts

whitespace

Remove parent scope

Remove parent scope from initial setter

Remove debug

Remove helper programs

* Fix NtImagimeterVisibility script

Co-authored-by: aronwk-aaron <aronwk.aaron@gmail.com>
2022-11-03 12:57:54 -05:00

108 lines
2.5 KiB
C++

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