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:
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,
|
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 ) );
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -154,6 +154,7 @@ namespace Sapphire
|
||||||
|
|
||||||
InstanceContentPtr getAsInstanceContent();
|
InstanceContentPtr getAsInstanceContent();
|
||||||
|
|
||||||
|
void updateSpawnPoints();
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue