mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-27 06:47:45 +00:00
Basic director handling for instances, just the bare minimum so far
This commit is contained in:
parent
7a4e72969a
commit
78606873ae
9 changed files with 95 additions and 59 deletions
|
@ -156,12 +156,6 @@ namespace Common {
|
||||||
uint32_t sourceActorId;
|
uint32_t sourceActorId;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum RegionType : uint8_t
|
|
||||||
{
|
|
||||||
normal,
|
|
||||||
instance,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum CharaLook : uint8_t
|
enum CharaLook : uint8_t
|
||||||
{
|
{
|
||||||
Race = 0x00,
|
Race = 0x00,
|
||||||
|
|
|
@ -150,7 +150,7 @@ namespace Packets {
|
||||||
|
|
||||||
EquipDisplayFlags = 0x01FA, // updated 4.2
|
EquipDisplayFlags = 0x01FA, // updated 4.2
|
||||||
|
|
||||||
CFAvailableContents = 0x01CF,
|
CFAvailableContents = 0x01FD, // updated 4.2
|
||||||
|
|
||||||
PrepareZoning = 0x027C, // updated 4.2
|
PrepareZoning = 0x027C, // updated 4.2
|
||||||
ActorGauge = 0x027D, // updated 4.2
|
ActorGauge = 0x027D, // updated 4.2
|
||||||
|
|
|
@ -1 +1,21 @@
|
||||||
#include "Director.h"
|
#include "Director.h"
|
||||||
|
|
||||||
|
Core::Event::Director::Director( Core::Event::Director::DirectorType type, uint16_t contentId ) :
|
||||||
|
m_contentId( contentId ),
|
||||||
|
m_type( type ),
|
||||||
|
m_directorId( ( static_cast< uint32_t >( type ) << 16 ) | contentId ),
|
||||||
|
m_sequence( 0 ),
|
||||||
|
m_branch( 0 )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Core::Event::Director::getDirectorId() const
|
||||||
|
{
|
||||||
|
return m_directorId;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t Core::Event::Director::getContentId() const
|
||||||
|
{
|
||||||
|
return m_contentId;
|
||||||
|
}
|
||||||
|
|
|
@ -30,9 +30,17 @@ public:
|
||||||
DpsChallange = 0x800D
|
DpsChallange = 0x800D
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Director( DirectorType type, uint16_t contentId );
|
||||||
|
|
||||||
|
uint32_t getDirectorId() const;
|
||||||
|
uint16_t getContentId() const;
|
||||||
|
DirectorType getType() const;
|
||||||
|
uint8_t getSequence() const;
|
||||||
|
uint8_t getBranch() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*! Id of the content of the director */
|
/*! Id of the content of the director */
|
||||||
uint16_t m_id;
|
uint16_t m_contentId;
|
||||||
|
|
||||||
/*! DirectorType | ContentId */
|
/*! DirectorType | ContentId */
|
||||||
uint32_t m_directorId;
|
uint32_t m_directorId;
|
||||||
|
@ -49,11 +57,6 @@ private:
|
||||||
/*! type of the director */
|
/*! type of the director */
|
||||||
DirectorType m_type;
|
DirectorType m_type;
|
||||||
|
|
||||||
uint32_t getDirectorId() const;
|
|
||||||
uint16_t getContentId() const;
|
|
||||||
DirectorType getType() const;
|
|
||||||
uint8_t getSequence() const;
|
|
||||||
uint8_t getBranch() const;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -229,6 +229,11 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 0x321: // Director init finish
|
||||||
|
{
|
||||||
|
player.getCurrentZone()->onInitDirector( player.getAsPlayer() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
g_log.debug( "[" + std::to_string( m_pSession->getId() ) + "] Unhandled action: " +
|
g_log.debug( "[" + std::to_string( m_pSession->getId() ) + "] Unhandled action: " +
|
||||||
|
|
|
@ -1,24 +1,33 @@
|
||||||
#include "InstanceContent.h"
|
#include "InstanceContent.h"
|
||||||
|
|
||||||
|
#include <common/Common.h>
|
||||||
#include <common/Logging/Logger.h>
|
#include <common/Logging/Logger.h>
|
||||||
#include <common/Util/Util.h>
|
#include <common/Util/Util.h>
|
||||||
#include <common/Util/UtilMath.h>
|
#include <common/Util/UtilMath.h>
|
||||||
|
#include <servers/sapphire_zone/Event/Director.h>
|
||||||
|
|
||||||
#include "Actor/Player.h"
|
#include "Actor/Player.h"
|
||||||
|
|
||||||
|
#include "Network/PacketWrappers/ActorControlPacket142.h"
|
||||||
|
#include "Network/PacketWrappers/ActorControlPacket143.h"
|
||||||
|
|
||||||
extern Core::Logger g_log;
|
extern Core::Logger g_log;
|
||||||
|
|
||||||
|
using namespace Core::Common;
|
||||||
|
using namespace Core::Network::Packets;
|
||||||
|
using namespace Core::Network::Packets::Server;
|
||||||
|
|
||||||
Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceContent,
|
Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceContent,
|
||||||
uint32_t guId,
|
uint32_t guId,
|
||||||
const std::string& internalName,
|
const std::string& internalName,
|
||||||
const std::string& contentName,
|
const std::string& contentName,
|
||||||
uint32_t instanceContentId )
|
uint32_t instanceContentId )
|
||||||
: Zone( pInstanceContent->territoryType, guId, internalName, contentName ),
|
: Zone( static_cast< uint16_t >( pInstanceContent->territoryType ), guId, internalName, contentName ),
|
||||||
|
Director( Event::Director::InstanceContent, instanceContentId ),
|
||||||
m_instanceContentInfo( pInstanceContent ),
|
m_instanceContentInfo( pInstanceContent ),
|
||||||
m_instanceContentId( instanceContentId ),
|
m_instanceContentId( instanceContentId ),
|
||||||
m_state( Created )
|
m_state( Created )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Core::InstanceContent::~InstanceContent()
|
Core::InstanceContent::~InstanceContent()
|
||||||
|
@ -41,6 +50,10 @@ void Core::InstanceContent::onEnterTerritory( Entity::PlayerPtr pPlayer )
|
||||||
g_log.debug( "InstanceContent::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|"
|
g_log.debug( "InstanceContent::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|"
|
||||||
+ std::to_string( getInstanceContentId() ) +
|
+ std::to_string( getInstanceContentId() ) +
|
||||||
+ ", Entity#" + std::to_string( pPlayer->getId() ) );
|
+ ", Entity#" + std::to_string( pPlayer->getId() ) );
|
||||||
|
|
||||||
|
pPlayer->queuePacket(ActorControlPacket143( pPlayer->getId(), DirectorInit, getDirectorId(),
|
||||||
|
getInstanceContentId() ) );
|
||||||
|
pPlayer->setStateFlag( PlayerStateFlag::BoundByDuty );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::InstanceContent::onLeaveTerritory( Entity::PlayerPtr pPlayer )
|
void Core::InstanceContent::onLeaveTerritory( Entity::PlayerPtr pPlayer )
|
||||||
|
@ -48,9 +61,21 @@ void Core::InstanceContent::onLeaveTerritory( Entity::PlayerPtr pPlayer )
|
||||||
g_log.debug( "InstanceContent::onLeaveTerritory: Zone#" + std::to_string( getGuId() ) + "|"
|
g_log.debug( "InstanceContent::onLeaveTerritory: Zone#" + std::to_string( getGuId() ) + "|"
|
||||||
+ std::to_string( getInstanceContentId() ) +
|
+ std::to_string( getInstanceContentId() ) +
|
||||||
+ ", Entity#" + std::to_string( pPlayer->getId() ) );
|
+ ", Entity#" + std::to_string( pPlayer->getId() ) );
|
||||||
|
pPlayer->queuePacket(ActorControlPacket143( pPlayer->getId(), DirectorClear, getDirectorId() ) );
|
||||||
|
pPlayer->unsetStateFlag( PlayerStateFlag::BoundByDuty );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::InstanceContent::onUpdate( uint32_t currTime )
|
void Core::InstanceContent::onUpdate( uint32_t currTime )
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Core::InstanceContent::onFinishLoading( Entity::PlayerPtr pPlayer )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Core::InstanceContent::onInitDirector( Entity::PlayerPtr pPlayer )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -2,13 +2,14 @@
|
||||||
#define SAPPHIRE_INSTANCECONTENT_H
|
#define SAPPHIRE_INSTANCECONTENT_H
|
||||||
|
|
||||||
#include "Zone.h"
|
#include "Zone.h"
|
||||||
|
#include "Event/Director.h"
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include <common/Exd/ExdDataGenerated.h>
|
#include <common/Exd/ExdDataGenerated.h>
|
||||||
|
|
||||||
namespace Core
|
namespace Core
|
||||||
{
|
{
|
||||||
|
|
||||||
class InstanceContent : public Zone
|
class InstanceContent : public Zone, Event::Director
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum InstanceContentState
|
enum InstanceContentState
|
||||||
|
@ -27,8 +28,11 @@ public:
|
||||||
|
|
||||||
void onEnterTerritory( Entity::PlayerPtr pPlayer ) override;
|
void onEnterTerritory( Entity::PlayerPtr pPlayer ) override;
|
||||||
void onLeaveTerritory( Entity::PlayerPtr pPlayer ) override;
|
void onLeaveTerritory( Entity::PlayerPtr pPlayer ) override;
|
||||||
|
void onFinishLoading( Entity::PlayerPtr pPlayer ) override;
|
||||||
|
void onInitDirector( Entity::PlayerPtr pPlayer ) override;
|
||||||
void onUpdate( uint32_t currTime ) override;
|
void onUpdate( uint32_t currTime ) override;
|
||||||
|
|
||||||
|
|
||||||
Core::Data::ExdDataGenerated::InstanceContentPtr getInstanceContentInfo() const;
|
Core::Data::ExdDataGenerated::InstanceContentPtr getInstanceContentInfo() const;
|
||||||
|
|
||||||
uint32_t getInstanceContentId() const;
|
uint32_t getInstanceContentId() const;
|
||||||
|
|
|
@ -41,20 +41,18 @@ namespace Core {
|
||||||
/**
|
/**
|
||||||
* \brief
|
* \brief
|
||||||
*/
|
*/
|
||||||
Zone::Zone()
|
Zone::Zone() :
|
||||||
: m_territoryId( 0 )
|
m_territoryId( 0 ),
|
||||||
, m_guId( 0 )
|
m_guId( 0 ),
|
||||||
, m_type( Common::RegionType::normal )
|
m_currentWeather( static_cast< uint8_t >( Common::Weather::FairSkies ) ),
|
||||||
, m_currentWeather( static_cast< uint8_t >( Common::Weather::FairSkies ) )
|
m_weatherOverride( 0 ),
|
||||||
, m_weatherOverride( 0 )
|
m_lastMobUpdate( 0 ),
|
||||||
, m_lastMobUpdate( 0 )
|
m_currentFestivalId( 0 )
|
||||||
, m_currentFestivalId( 0 )
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& internalName, const std::string& placeName )
|
Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& internalName, const std::string& placeName ) :
|
||||||
: m_type( Common::RegionType::normal )
|
m_currentWeather( static_cast< uint8_t >( Common::Weather::FairSkies ) )
|
||||||
, m_currentWeather( static_cast< uint8_t >( Common::Weather::FairSkies ) )
|
|
||||||
{
|
{
|
||||||
m_guId = guId;
|
m_guId = guId;
|
||||||
|
|
||||||
|
@ -104,11 +102,6 @@ bool Zone::init()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Zone::isPrivateZone() const
|
|
||||||
{
|
|
||||||
return m_bPrivate;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Zone::setWeatherOverride( uint8_t weather )
|
void Zone::setWeatherOverride( uint8_t weather )
|
||||||
{
|
{
|
||||||
m_weatherOverride = weather;
|
m_weatherOverride = weather;
|
||||||
|
@ -179,7 +172,7 @@ void Zone::loadCellCache()
|
||||||
"Look,"
|
"Look,"
|
||||||
"Models,"
|
"Models,"
|
||||||
"type "
|
"type "
|
||||||
"FROM battlenpc WHERE ZoneId = " + std::to_string(getTerritoryId() ) + ";" );
|
"FROM battlenpc WHERE ZoneId = " + std::to_string( getTerritoryId() ) + ";" );
|
||||||
|
|
||||||
std::vector< Entity::BattleNpcPtr > cache;
|
std::vector< Entity::BattleNpcPtr > cache;
|
||||||
|
|
||||||
|
@ -395,26 +388,16 @@ void Zone::queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t range,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Zone::getTerritoryId()
|
uint32_t Zone::getTerritoryId() const
|
||||||
{
|
{
|
||||||
return m_territoryId;
|
return m_territoryId;
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::RegionType Zone::getType() const
|
uint32_t Zone::getGuId() const
|
||||||
{
|
|
||||||
return m_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t Zone::getGuId() const
|
|
||||||
{
|
{
|
||||||
return m_guId;
|
return m_guId;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Zone::isInstance() const
|
|
||||||
{
|
|
||||||
return m_type == Common::RegionType::instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string& Zone::getName() const
|
const std::string& Zone::getName() const
|
||||||
{
|
{
|
||||||
return m_placeName;
|
return m_placeName;
|
||||||
|
@ -774,8 +757,9 @@ void Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell )
|
||||||
if( !pOwnPlayer->isLoadingComplete() )
|
if( !pOwnPlayer->isLoadingComplete() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// this is a hack to limit actor spawn in one packetset
|
||||||
count++;
|
count++;
|
||||||
if( count > 15 )
|
if( count > 12 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
pActor->addInRangeActor( pCurAct );
|
pActor->addInRangeActor( pCurAct );
|
||||||
|
@ -829,4 +813,14 @@ void Zone::onUpdate( uint32_t currTime )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Zone::onFinishLoading( Entity::PlayerPtr pPlayer )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Zone::onInitDirector( Entity::PlayerPtr pPlayer )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,8 +32,6 @@ protected:
|
||||||
std::string m_placeName;
|
std::string m_placeName;
|
||||||
std::string m_internalName;
|
std::string m_internalName;
|
||||||
|
|
||||||
bool m_bPrivate;
|
|
||||||
|
|
||||||
std::unordered_map< int32_t, Entity::PlayerPtr > m_playerMap;
|
std::unordered_map< int32_t, Entity::PlayerPtr > m_playerMap;
|
||||||
std::unordered_map< int32_t, Entity::BattleNpcPtr > m_BattleNpcMap;
|
std::unordered_map< int32_t, Entity::BattleNpcPtr > m_BattleNpcMap;
|
||||||
std::unordered_map< int32_t, Entity::EventNpcPtr > m_EventNpcMap;
|
std::unordered_map< int32_t, Entity::EventNpcPtr > m_EventNpcMap;
|
||||||
|
@ -44,8 +42,6 @@ protected:
|
||||||
|
|
||||||
CellCache** m_pCellCache[_sizeX];
|
CellCache** m_pCellCache[_sizeX];
|
||||||
|
|
||||||
Common::RegionType m_type;
|
|
||||||
|
|
||||||
uint8_t m_currentWeather;
|
uint8_t m_currentWeather;
|
||||||
uint8_t m_weatherOverride;
|
uint8_t m_weatherOverride;
|
||||||
|
|
||||||
|
@ -64,8 +60,6 @@ public:
|
||||||
|
|
||||||
bool init();
|
bool init();
|
||||||
|
|
||||||
bool isPrivateZone() const;
|
|
||||||
|
|
||||||
/*! overrides the zone's weather, set to 0 to unlock */
|
/*! overrides the zone's weather, set to 0 to unlock */
|
||||||
void setWeatherOverride( uint8_t weather );
|
void setWeatherOverride( uint8_t weather );
|
||||||
|
|
||||||
|
@ -79,8 +73,10 @@ public:
|
||||||
CellCache* getCellCacheAndCreate( uint32_t cellx, uint32_t celly );
|
CellCache* getCellCacheAndCreate( uint32_t cellx, uint32_t celly );
|
||||||
|
|
||||||
virtual void loadCellCache();
|
virtual void loadCellCache();
|
||||||
virtual uint32_t getTerritoryId();
|
virtual uint32_t getTerritoryId() const;
|
||||||
virtual void onEnterTerritory( Entity::PlayerPtr pPlayer );
|
virtual void onEnterTerritory( Entity::PlayerPtr pPlayer );
|
||||||
|
virtual void onFinishLoading( Entity::PlayerPtr pPlayer );
|
||||||
|
virtual void onInitDirector( Entity::PlayerPtr pPlayer );
|
||||||
virtual void onLeaveTerritory( Entity::PlayerPtr pPlayer );
|
virtual void onLeaveTerritory( Entity::PlayerPtr pPlayer );
|
||||||
virtual void onUpdate( uint32_t currTime );
|
virtual void onUpdate( uint32_t currTime );
|
||||||
|
|
||||||
|
@ -100,14 +96,9 @@ public:
|
||||||
|
|
||||||
void queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t range, Network::Packets::GamePacketPtr pPacketEntry );
|
void queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t range, Network::Packets::GamePacketPtr pPacketEntry );
|
||||||
|
|
||||||
Common::RegionType getType() const;
|
uint32_t getGuId() const;
|
||||||
|
|
||||||
uint16_t getGuId() const;
|
|
||||||
|
|
||||||
bool isInstance() const;
|
|
||||||
|
|
||||||
const std::string& getName() const;
|
const std::string& getName() const;
|
||||||
|
|
||||||
const std::string& getInternalName() const;
|
const std::string& getInternalName() const;
|
||||||
|
|
||||||
std::size_t getPopCount() const;
|
std::size_t getPopCount() const;
|
||||||
|
|
Loading…
Add table
Reference in a new issue