DarkflameServer/dScripts/EnemySkeletonSpawner.cpp

76 lines
2.0 KiB
C++
Raw Normal View History

#include "EnemySkeletonSpawner.h"
#include "SkillComponent.h"
#include "RenderComponent.h"
#include "EntityManager.h"
2022-07-28 13:39:57 +00:00
void EnemySkeletonSpawner::OnStartup(Entity* self) {
self->SetProximityRadius(15, "ronin");
2022-07-28 13:39:57 +00:00
auto* skillComponent = self->GetComponent<SkillComponent>();
2022-07-28 13:39:57 +00:00
if (skillComponent != nullptr) {
skillComponent->CalculateBehavior(1127, 24812, LWOOBJID_EMPTY, true);
}
}
2022-07-28 13:39:57 +00:00
void EnemySkeletonSpawner::OnTimerDone(Entity* self, std::string timerName) {
if (timerName == "hatchTime") {
auto* renderComponent = self->GetComponent<RenderComponent>();
2022-07-28 13:39:57 +00:00
if (renderComponent != nullptr) {
renderComponent->PlayEffect(644, u"create", "BurstFX1");
}
2022-07-28 13:39:57 +00:00
EntityInfo info{};
info.lot = 14024;
info.pos = self->GetPosition();
info.rot = self->GetRotation();
info.spawnerID = self->GetObjectID();
2022-07-28 13:39:57 +00:00
auto* spawnedEntity = EntityManager::Instance()->CreateEntity(info);
2022-07-28 13:39:57 +00:00
if (spawnedEntity == nullptr) {
return;
}
2022-07-28 13:39:57 +00:00
EntityManager::Instance()->ConstructEntity(spawnedEntity);
2022-07-28 13:39:57 +00:00
spawnedEntity->AddCallbackTimer(60, [spawnedEntity]() {
spawnedEntity->Smash(spawnedEntity->GetObjectID());
});
2022-07-28 13:39:57 +00:00
self->Smash(self->GetObjectID());
}
}
2022-07-28 13:39:57 +00:00
void EnemySkeletonSpawner::OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) {
if (entering->IsPlayer() && name == "ronin" && status == "ENTER" && !self->GetVar<bool>(u"hatching")) {
StartHatching(self);
2022-07-28 13:39:57 +00:00
auto* skillComponent = self->GetComponent<SkillComponent>();
2022-07-28 13:39:57 +00:00
if (skillComponent != nullptr) {
skillComponent->CalculateBehavior(305, 3568, LWOOBJID_EMPTY);
}
}
}
2022-07-28 13:39:57 +00:00
void EnemySkeletonSpawner::OnHit(Entity* self, Entity* attacker) {
if (!self->GetVar<bool>(u"hatching")) {
StartHatching(self);
}
}
2022-07-28 13:39:57 +00:00
void EnemySkeletonSpawner::StartHatching(Entity* self) {
self->SetVar(u"hatching", true);
2022-07-28 13:39:57 +00:00
auto* renderComponent = self->GetComponent<RenderComponent>();
2022-07-28 13:39:57 +00:00
if (renderComponent != nullptr) {
renderComponent->PlayEffect(9017, u"cast", "WakeUpFX1");
renderComponent->PlayEffect(9018, u"burst", "WakeUpFX1");
}
2022-07-28 13:39:57 +00:00
self->AddTimer("hatchTime", 2);
}