mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-08-09 20:24:16 +00:00
Public release of the DLU server code!
Have fun!
This commit is contained in:
74
dScripts/EnemySpiderSpawner.cpp
Normal file
74
dScripts/EnemySpiderSpawner.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
#include "EnemySpiderSpawner.h"
|
||||
#include "GameMessages.h"
|
||||
#include "SimplePhysicsComponent.h"
|
||||
#include "EntityManager.h"
|
||||
#include "DestroyableComponent.h"
|
||||
#include "MovementAIComponent.h"
|
||||
|
||||
//----------------------------------------------
|
||||
//--Initiate egg hatching on call
|
||||
//----------------------------------------------
|
||||
void EnemySpiderSpawner::OnFireEventServerSide(Entity *self, Entity *sender, std::string args, int32_t param1,
|
||||
int32_t param2, int32_t param3) {
|
||||
if (args == "prepEgg") {
|
||||
// Highlight eggs about to hatch with Maelstrom effect
|
||||
GameMessages::SendPlayFXEffect(self->GetObjectID(), 2856, u"maelstrom", "test", LWOOBJID_EMPTY, 1.0f, 1.0f, true);
|
||||
|
||||
// Make indestructible
|
||||
auto dest = static_cast<DestroyableComponent*>(self->GetComponent(COMPONENT_TYPE_DESTROYABLE));
|
||||
if (dest) {
|
||||
dest->SetFaction(-1);
|
||||
}
|
||||
EntityManager::Instance()->SerializeEntity(self);
|
||||
|
||||
// Keep track of who prepped me
|
||||
self->SetI64(u"SpawnOwner", sender->GetObjectID());
|
||||
|
||||
} else if (args == "hatchEgg") {
|
||||
// Final countdown to pop
|
||||
self->AddTimer("StartSpawnTime", hatchTime);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
//--Called when timers are done
|
||||
//----------------------------------------------------------------
|
||||
void EnemySpiderSpawner::OnTimerDone(Entity* self, std::string timerName) {
|
||||
if (timerName == "StartSpawnTime") {
|
||||
SpawnSpiderling(self);
|
||||
} else if (timerName == "SpawnSpiderling") {
|
||||
GameMessages::SendPlayFXEffect(self->GetObjectID(), 644, u"create", "egg_puff_b", LWOOBJID_EMPTY, 1.0f, 1.0f, true);
|
||||
|
||||
//TODO: set the aggro radius larger
|
||||
|
||||
EntityInfo info {};
|
||||
info.lot = 16197;
|
||||
info.pos = self->GetPosition();
|
||||
info.spawner = nullptr;
|
||||
info.spawnerID = self->GetI64(u"SpawnOwner");
|
||||
info.spawnerNodeID = 0;
|
||||
|
||||
Entity* newEntity = EntityManager::Instance()->CreateEntity(info, nullptr);
|
||||
if (newEntity) {
|
||||
EntityManager::Instance()->ConstructEntity(newEntity);
|
||||
newEntity->GetGroups().push_back("BabySpider");
|
||||
|
||||
/*
|
||||
auto* movementAi = newEntity->GetComponent<MovementAIComponent>();
|
||||
|
||||
movementAi->SetDestination(newEntity->GetPosition());
|
||||
*/
|
||||
}
|
||||
|
||||
self->ScheduleKillAfterUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
//Called when it is finally time to release the Spiderlings
|
||||
//--------------------------------------------------------------
|
||||
void EnemySpiderSpawner::SpawnSpiderling(Entity* self) {
|
||||
//Initiate the actual spawning
|
||||
GameMessages::SendPlayFXEffect(self->GetObjectID(), 2260, u"rebuild_medium", "dropdustmedium", LWOOBJID_EMPTY, 1.0f, 1.0f, true);
|
||||
self->AddTimer("SpawnSpiderling", spawnTime);
|
||||
}
|
Reference in New Issue
Block a user