mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-23 21:27:45 +00:00
Mobs spawn with randomized rotation and are actually targetable now
This commit is contained in:
parent
b0760043c3
commit
06e214956c
5 changed files with 30 additions and 7 deletions
|
@ -40,10 +40,11 @@ Sapphire::Entity::BNpc::BNpc( FrameworkPtr pFw ) :
|
|||
{
|
||||
}
|
||||
|
||||
Sapphire::Entity::BNpc::BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ,
|
||||
Sapphire::Entity::BNpc::BNpc( uint32_t id, BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, float rot,
|
||||
uint8_t level, uint32_t maxHp, FrameworkPtr pFw ) :
|
||||
Npc( ObjKind::BattleNpc, pFw )
|
||||
{
|
||||
m_id = id;
|
||||
m_modelChara = pTemplate->getModelChara();
|
||||
m_displayFlags = pTemplate->getDisplayFlags();
|
||||
m_pose = pTemplate->getPose();
|
||||
|
@ -56,6 +57,7 @@ Sapphire::Entity::BNpc::BNpc( BNpcTemplatePtr pTemplate, float posX, float posY,
|
|||
m_pos.x = posX;
|
||||
m_pos.y = posY;
|
||||
m_pos.z = posZ;
|
||||
m_rot = rot;
|
||||
m_level = level;
|
||||
|
||||
m_maxHp = maxHp;
|
||||
|
|
|
@ -23,7 +23,8 @@ namespace Sapphire::Entity
|
|||
|
||||
public:
|
||||
BNpc( FrameworkPtr pFw );
|
||||
BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, uint8_t level, uint32_t maxHp, FrameworkPtr pFw );
|
||||
BNpc( uint32_t id, BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, float rot,
|
||||
uint8_t level, uint32_t maxHp, FrameworkPtr pFw );
|
||||
|
||||
virtual ~BNpc() override;
|
||||
|
||||
|
|
|
@ -432,13 +432,16 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player&
|
|||
player.sendNotice( "Template {0} not found in cache!", params );
|
||||
return;
|
||||
}
|
||||
auto pBNpc = std::make_shared< Entity::BNpc >( bNpcTemplate,
|
||||
auto playerZone = player.getCurrentZone();
|
||||
auto pBNpc = std::make_shared< Entity::BNpc >( playerZone->getNextActorId(),
|
||||
bNpcTemplate,
|
||||
player.getPos().x,
|
||||
player.getPos().y,
|
||||
player.getPos().z,
|
||||
player.getRot(),
|
||||
1, 1000, framework() );
|
||||
|
||||
auto playerZone = player.getCurrentZone();
|
||||
|
||||
|
||||
//pBNpc->setCurrentZone( playerZone );
|
||||
//pBNpc->setPos( player.getPos().x, player.getPos().y, player.getPos().z );
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <stdio.h>
|
||||
#include <vector>
|
||||
#include <time.h>
|
||||
#include <random>
|
||||
|
||||
#include <Logging/Logger.h>
|
||||
#include <Util/Util.h>
|
||||
|
@ -53,7 +54,8 @@ Sapphire::Zone::Zone() :
|
|||
m_currentWeather( Weather::FairSkies ),
|
||||
m_weatherOverride( Weather::None ),
|
||||
m_lastMobUpdate( 0 ),
|
||||
m_nextEObjId( 0x400D0000 )
|
||||
m_nextEObjId( 0x400D0000 ),
|
||||
m_nextActorId( 0x500D0000 )
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -741,6 +743,12 @@ uint32_t Sapphire::Zone::getNextEObjId()
|
|||
return ++m_nextEObjId;
|
||||
}
|
||||
|
||||
uint32_t Sapphire::Zone::getNextActorId()
|
||||
{
|
||||
return ++m_nextActorId;
|
||||
}
|
||||
|
||||
|
||||
Sapphire::Entity::EventObjectPtr Sapphire::Zone::registerEObj( const std::string& name, uint32_t objectId, uint32_t mapLink,
|
||||
uint8_t state, FFXIVARR_POSITION3 pos, float scale,
|
||||
float rotation )
|
||||
|
@ -804,6 +812,10 @@ bool Sapphire::Zone::loadSpawnGroups()
|
|||
|
||||
void Sapphire::Zone::updateSpawnPoints()
|
||||
{
|
||||
std::random_device rd;
|
||||
std::mt19937 mt( rd() );
|
||||
std::uniform_real_distribution< float > dist( 0.0, PI * 2 );
|
||||
|
||||
for( auto& group : m_spawnGroups )
|
||||
{
|
||||
for( auto& point : group.getSpawnPointList() )
|
||||
|
@ -820,12 +832,14 @@ void Sapphire::Zone::updateSpawnPoints()
|
|||
continue;
|
||||
}
|
||||
|
||||
//Logger::error( "No template found for templateId#{0}", group.getTemplateId() );
|
||||
uint32_t random = rand() % 20;
|
||||
|
||||
auto pBNpc = std::make_shared< Entity::BNpc >( bNpcTemplate,
|
||||
auto pBNpc = std::make_shared< Entity::BNpc >( getNextActorId(),
|
||||
bNpcTemplate,
|
||||
point->getPosX(),
|
||||
point->getPosY(),
|
||||
point->getPosZ(),
|
||||
dist( mt ),
|
||||
group.getLevel(),
|
||||
group.getMaxHp(), m_pFw );
|
||||
point->setLinkedBNpc( pBNpc );
|
||||
|
|
|
@ -57,6 +57,7 @@ namespace Sapphire
|
|||
std::map< uint8_t, int32_t > m_weatherRateMap;
|
||||
|
||||
uint32_t m_nextEObjId;
|
||||
uint32_t m_nextActorId;
|
||||
FrameworkPtr m_pFw;
|
||||
|
||||
std::vector< Entity::SpawnGroup > m_spawnGroups;
|
||||
|
@ -128,6 +129,8 @@ namespace Sapphire
|
|||
|
||||
uint32_t getNextEObjId();
|
||||
|
||||
uint32_t getNextActorId();
|
||||
|
||||
const std::string& getName() const;
|
||||
|
||||
const std::string& getInternalName() const;
|
||||
|
|
Loading…
Add table
Reference in a new issue