1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 14:57:44 +00:00

Very rudementary spawn implementation and db fix

This commit is contained in:
Mordred 2019-01-08 17:08:48 +01:00
parent d2135592d0
commit da67f6cae8
11 changed files with 603 additions and 532 deletions

File diff suppressed because one or more lines are too long

View file

@ -41,7 +41,7 @@ Sapphire::Entity::BNpc::BNpc( FrameworkPtr pFw ) :
} }
Sapphire::Entity::BNpc::BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, Sapphire::Entity::BNpc::BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ,
uint8_t level, FrameworkPtr pFw ) : uint8_t level, uint32_t maxHp, FrameworkPtr pFw ) :
Npc( ObjKind::BattleNpc, pFw ) Npc( ObjKind::BattleNpc, pFw )
{ {
m_modelChara = pTemplate->getModelChara(); m_modelChara = pTemplate->getModelChara();
@ -58,12 +58,12 @@ Sapphire::Entity::BNpc::BNpc( BNpcTemplatePtr pTemplate, float posX, float posY,
m_pos.z = posZ; m_pos.z = posZ;
m_level = level; m_level = level;
m_maxHp = 200; m_maxHp = maxHp;
m_maxMp = 200; m_maxMp = 200;
m_hp = 200; m_hp = maxHp;
m_mp = 200; m_mp = 200;
m_baseStats.max_hp = 200; m_baseStats.max_hp = maxHp;
m_baseStats.max_mp = 200; m_baseStats.max_mp = 200;
memcpy( m_customize, pTemplate->getCustomize(), sizeof( m_customize ) ); memcpy( m_customize, pTemplate->getCustomize(), sizeof( m_customize ) );

View file

@ -23,7 +23,7 @@ namespace Sapphire::Entity
public: public:
BNpc( FrameworkPtr pFw ); BNpc( FrameworkPtr pFw );
BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, uint8_t level, FrameworkPtr pFw ); BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, uint8_t level, uint32_t maxHp, FrameworkPtr pFw );
virtual ~BNpc() override; virtual ~BNpc() override;

View file

@ -20,7 +20,7 @@ uint32_t Sapphire::Entity::SpawnGroup::getTemplateId() const
return m_bNpcTemplateId; return m_bNpcTemplateId;
} }
uint32_t Sapphire::Entity::SpawnGroup::getLevelId() const uint32_t Sapphire::Entity::SpawnGroup::getLevel() const
{ {
return m_level; return m_level;
} }

View file

@ -24,7 +24,7 @@ namespace Sapphire::Entity
uint32_t getId() const; uint32_t getId() const;
uint32_t getTemplateId() const; uint32_t getTemplateId() const;
uint32_t getLevelId() const; uint32_t getLevel() const;
uint32_t getMaxHp() const; uint32_t getMaxHp() const;
SpawnPointList& getSpawnPointList(); SpawnPointList& getSpawnPointList();

View file

@ -17,6 +17,16 @@ Sapphire::Entity::SpawnPoint::SpawnPoint( float x, float y, float z, float rot,
{ {
} }
uint32_t Sapphire::Entity::SpawnPoint::getTimeOfDeath() const
{
return m_timeOfDeath;
}
void Sapphire::Entity::SpawnPoint::setTimeOfDeath( uint32_t timeOfDeath )
{
m_timeOfDeath = timeOfDeath;
}
float Sapphire::Entity::SpawnPoint::getPosX() const float Sapphire::Entity::SpawnPoint::getPosX() const
{ {
return m_posX; return m_posX;

View file

@ -33,6 +33,9 @@ namespace Sapphire::Entity
BNpcPtr getLinkedBNpc(); BNpcPtr getLinkedBNpc();
void setLinkedBNpc( BNpcPtr pBnpc ); void setLinkedBNpc( BNpcPtr pBnpc );
uint32_t getTimeOfDeath() const;
void setTimeOfDeath( uint32_t m_timeOfDeath );
}; };
} }

View file

@ -436,7 +436,7 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player&
player.getPos().x, player.getPos().x,
player.getPos().y, player.getPos().y,
player.getPos().z, player.getPos().z,
1, framework() ); 1, 1000, framework() );
auto playerZone = player.getCurrentZone(); auto playerZone = player.getCurrentZone();

View file

@ -163,6 +163,8 @@ void Sapphire::World::ServerMgr::run( int32_t argc, char* argv[] )
} }
framework()->set< Scripting::ScriptMgr >( pScript ); framework()->set< Scripting::ScriptMgr >( pScript );
loadBNpcTemplates();
Logger::info( "TerritoryMgr: Setting up zones" ); Logger::info( "TerritoryMgr: Setting up zones" );
auto pTeriMgr = std::make_shared< Manager::TerritoryMgr >( framework() ); auto pTeriMgr = std::make_shared< Manager::TerritoryMgr >( framework() );
auto pHousingMgr = std::make_shared< Manager::HousingMgr >( framework() ); auto pHousingMgr = std::make_shared< Manager::HousingMgr >( framework() );
@ -189,7 +191,7 @@ void Sapphire::World::ServerMgr::run( int32_t argc, char* argv[] )
return; return;
} }
loadBNpcTemplates();
Network::HivePtr hive( new Network::Hive() ); Network::HivePtr hive( new Network::Hive() );
Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive, framework() ); Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive, framework() );
@ -421,7 +423,6 @@ void Sapphire::World::ServerMgr::updatePlayerName( uint32_t playerId, const std:
void Sapphire::World::ServerMgr::loadBNpcTemplates() void Sapphire::World::ServerMgr::loadBNpcTemplates()
{ {
auto pDb = framework()->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDb = framework()->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pTeriMgr = framework()->get< TerritoryMgr >();
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::ZONE_SEL_BNPCTEMPLATES ); auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::ZONE_SEL_BNPCTEMPLATES );

View file

@ -435,6 +435,7 @@ bool Sapphire::Zone::update( uint32_t currTime )
//updateBnpcs( tickCount ); //updateBnpcs( tickCount );
onUpdate( currTime ); onUpdate( currTime );
updateSpawnPoints();
return true; return true;
} }
@ -772,7 +773,7 @@ bool Sapphire::Zone::loadSpawnGroups()
m_spawnGroups.emplace_back( id, templateId, level, maxHp ); m_spawnGroups.emplace_back( id, templateId, level, maxHp );
Logger::debug( "id: {0}, template: {1}, level: {2}, maxHp: {3}", id, templateId, level, maxHp ); Logger::debug( "id: {0}, template: {1}, level: {2}, maxHp: {3}", id, m_spawnGroups.back().getTemplateId(), level, maxHp );
} }
res.reset(); res.reset();
@ -800,3 +801,38 @@ bool Sapphire::Zone::loadSpawnGroups()
} }
return false; return false;
} }
void Sapphire::Zone::updateSpawnPoints()
{
for( auto& group : m_spawnGroups )
{
for( auto& point : group.getSpawnPointList() )
{
if( !point->getLinkedBNpc() && ( Util::getTimeSeconds() - point->getTimeOfDeath() ) > 60 )
{
auto serverZone = m_pFw->get< World::ServerMgr >();
auto bNpcTemplate = serverZone->getBNpcTemplate( group.getTemplateId() );
if( !bNpcTemplate )
{
//Logger::error( "No template found for templateId#{0}", group.getTemplateId() );
continue;
}
//Logger::error( "No template found for templateId#{0}", group.getTemplateId() );
auto pBNpc = std::make_shared< Entity::BNpc >( bNpcTemplate,
point->getPosX(),
point->getPosY(),
point->getPosZ(),
group.getLevel(),
group.getMaxHp(), m_pFw );
point->setLinkedBNpc( pBNpc );
pushActor( pBNpc );
}
}
}
}

View file

@ -154,6 +154,7 @@ namespace Sapphire
InstanceContentPtr getAsInstanceContent(); InstanceContentPtr getAsInstanceContent();
void updateSpawnPoints();
}; };
} }