DarkflameServer/dScripts/AgJetEffectServer.cpp
2022-06-22 01:22:59 -07:00

131 lines
2.3 KiB
C++

#include "AgJetEffectServer.h"
#include "GameMessages.h"
#include "EntityManager.h"
#include "SkillComponent.h"
void AgJetEffectServer::OnUse(Entity* self, Entity* user)
{
if (inUse)
{
return;
}
GameMessages::SendNotifyClientObject(
self->GetObjectID(),
u"isInUse",
0,
0,
LWOOBJID_EMPTY,
"",
UNASSIGNED_SYSTEM_ADDRESS
);
inUse = true;
auto entities = EntityManager::Instance()->GetEntitiesInGroup("Jet_FX");
if (entities.empty())
{
return;
}
auto* effect = entities[0];
GameMessages::SendPlayFXEffect(effect, 641, u"create", "radarDish", LWOOBJID_EMPTY, 1, 1, true);
self->AddTimer("radarDish", 2);
self->AddTimer("CineDone", 9);
}
void AgJetEffectServer::OnRebuildComplete(Entity* self, Entity* target)
{
auto entities = EntityManager::Instance()->GetEntitiesInGroup("Jet_FX");
if (entities.empty())
{
return;
}
auto* effect = entities[0];
auto groups = self->GetGroups();
if (groups.empty())
{
return;
}
builder = target->GetObjectID();
const auto group = groups[0];
GameMessages::SendPlayAnimation(effect, u"jetFX");
self->AddTimer("PlayEffect", 2.5f);
if (group == "Base_Radar")
{
self->AddTimer("CineDone", 5);
}
}
void AgJetEffectServer::OnTimerDone(Entity* self, std::string timerName)
{
if (timerName == "radarDish")
{
GameMessages::SendStopFXEffect(self, true, "radarDish");
return;
}
if (timerName == "PlayEffect")
{
auto entities = EntityManager::Instance()->GetEntitiesInGroup("mortarMain");
if (entities.empty())
{
return;
}
const auto size = entities.size();
if (size == 0)
{
return;
}
const auto selected = GeneralUtils::GenerateRandomNumber<int>(0, size - 1);
auto* mortar = entities[selected];
Game::logger->Log("AgJetEffectServer", "Mortar (%i) (&d)\n", mortar->GetLOT(), mortar->HasComponent(COMPONENT_TYPE_SKILL));
mortar->SetOwnerOverride(builder);
SkillComponent* skillComponent;
if (!mortar->TryGetComponent(COMPONENT_TYPE_SKILL, skillComponent))
{
return;
}
skillComponent->CalculateBehavior(318, 3727, LWOOBJID_EMPTY, true);
return;
}
if (timerName == "CineDone")
{
GameMessages::SendNotifyClientObject(
self->GetObjectID(),
u"toggleInUse",
-1,
0,
LWOOBJID_EMPTY,
"",
UNASSIGNED_SYSTEM_ADDRESS
);
inUse = false;
}
}