mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 22:37:45 +00:00
Very rudementary spawn implementation and db fix
This commit is contained in:
parent
d2135592d0
commit
da67f6cae8
11 changed files with 603 additions and 532 deletions
File diff suppressed because one or more lines are too long
|
@ -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 ) );
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -33,6 +33,9 @@ namespace Sapphire::Entity
|
|||
BNpcPtr getLinkedBNpc();
|
||||
void setLinkedBNpc( BNpcPtr pBnpc );
|
||||
|
||||
uint32_t getTimeOfDeath() const;
|
||||
void setTimeOfDeath( uint32_t m_timeOfDeath );
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -154,6 +154,7 @@ namespace Sapphire
|
|||
|
||||
InstanceContentPtr getAsInstanceContent();
|
||||
|
||||
void updateSpawnPoints();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue