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

View file

@ -23,7 +23,7 @@ namespace Sapphire::Entity
public:
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;

View file

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

View file

@ -24,7 +24,7 @@ namespace Sapphire::Entity
uint32_t getId() const;
uint32_t getTemplateId() const;
uint32_t getLevelId() const;
uint32_t getLevel() const;
uint32_t getMaxHp() const;
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
{
return m_posX;

View file

@ -33,6 +33,9 @@ namespace Sapphire::Entity
BNpcPtr getLinkedBNpc();
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().y,
player.getPos().z,
1, framework() );
1, 1000, framework() );
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 );
loadBNpcTemplates();
Logger::info( "TerritoryMgr: Setting up zones" );
auto pTeriMgr = std::make_shared< Manager::TerritoryMgr >( framework() );
auto pHousingMgr = std::make_shared< Manager::HousingMgr >( framework() );
@ -189,7 +191,7 @@ void Sapphire::World::ServerMgr::run( int32_t argc, char* argv[] )
return;
}
loadBNpcTemplates();
Network::HivePtr hive( new Network::Hive() );
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()
{
auto pDb = framework()->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pTeriMgr = framework()->get< TerritoryMgr >();
auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::ZONE_SEL_BNPCTEMPLATES );

View file

@ -435,6 +435,7 @@ bool Sapphire::Zone::update( uint32_t currTime )
//updateBnpcs( tickCount );
onUpdate( currTime );
updateSpawnPoints();
return true;
}
@ -772,7 +773,7 @@ bool Sapphire::Zone::loadSpawnGroups()
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();
@ -800,3 +801,38 @@ bool Sapphire::Zone::loadSpawnGroups()
}
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();
void updateSpawnPoints();
};
}