mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-24 21:57:44 +00:00
Begin of InstanceContent implementation
This commit is contained in:
parent
04f5823c4b
commit
d9da17cd35
6 changed files with 84 additions and 17 deletions
|
@ -16,9 +16,26 @@ namespace Event {
|
||||||
|
|
||||||
class Director
|
class Director
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum DirectorType
|
||||||
|
{
|
||||||
|
InstanceContent = 0x8003, // used for dungeons/raids
|
||||||
|
CompanyLeve = 0x8007,
|
||||||
|
QuestBattle = 0x8006,
|
||||||
|
GatheringLeve = 0x8002,
|
||||||
|
BattleLeve = 0x8001,
|
||||||
|
GoldSaucer = 0x800A,
|
||||||
|
Fate = 0x801A,
|
||||||
|
DpsChallange = 0x800D
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*! Id of the director */
|
/*! Id of the content of the director */
|
||||||
uint32_t m_id;
|
uint16_t m_id;
|
||||||
|
|
||||||
|
/*! DirectorType | ContentId */
|
||||||
|
uint32_t m_directorId;
|
||||||
|
|
||||||
/*! currect sequence */
|
/*! currect sequence */
|
||||||
uint8_t m_sequence;
|
uint8_t m_sequence;
|
||||||
|
@ -29,9 +46,14 @@ private:
|
||||||
/*! raw storage for flags/vars */
|
/*! raw storage for flags/vars */
|
||||||
uint8_t m_unionData[10];
|
uint8_t m_unionData[10];
|
||||||
|
|
||||||
public:
|
/*! type of the director */
|
||||||
uint8_t getId() const;
|
DirectorType m_type;
|
||||||
|
|
||||||
|
uint32_t getDirectorId() const;
|
||||||
|
uint16_t getContentId() const;
|
||||||
|
DirectorType getType() const;
|
||||||
uint8_t getSequence() const;
|
uint8_t getSequence() const;
|
||||||
|
uint8_t getBranch() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ namespace Core
|
||||||
|
|
||||||
namespace Event
|
namespace Event
|
||||||
{
|
{
|
||||||
|
TYPE_FORWARD( Director );
|
||||||
TYPE_FORWARD( EventHandler );
|
TYPE_FORWARD( EventHandler );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
src/servers/sapphire_zone/Zone/InstanceContent.cpp
Normal file
1
src/servers/sapphire_zone/Zone/InstanceContent.cpp
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#include "InstanceContent.h"
|
22
src/servers/sapphire_zone/Zone/InstanceContent.h
Normal file
22
src/servers/sapphire_zone/Zone/InstanceContent.h
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef SAPPHIRE_INSTANCECONTENT_H
|
||||||
|
#define SAPPHIRE_INSTANCECONTENT_H
|
||||||
|
|
||||||
|
#include "Zone.h"
|
||||||
|
#include "Forwards.h"
|
||||||
|
|
||||||
|
namespace Core
|
||||||
|
{
|
||||||
|
|
||||||
|
class InstanceContent : public Zone
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
InstanceContent( uint32_t instanceContentId, uint32_t guid );
|
||||||
|
virtual ~InstanceContent();
|
||||||
|
|
||||||
|
private:
|
||||||
|
DirectorPtr m_pDirector;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif //SAPPHIRE_INSTANCECONTENT_H
|
|
@ -120,7 +120,7 @@ bool Core::TerritoryMgr::createDefaultTerritories()
|
||||||
|
|
||||||
InstanceIdToZonePtrMap instanceMap;
|
InstanceIdToZonePtrMap instanceMap;
|
||||||
instanceMap[guid] = pZone;
|
instanceMap[guid] = pZone;
|
||||||
|
m_instanceIdToZonePtrMap[guid] = pZone;
|
||||||
m_territoryInstanceMap[territoryId] = instanceMap;
|
m_territoryInstanceMap[territoryId] = instanceMap;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -179,8 +179,6 @@ Core::ZonePtr Core::TerritoryMgr::getZoneByTerriId( uint32_t territoryId ) const
|
||||||
|
|
||||||
// TODO: actually select the proper one
|
// TODO: actually select the proper one
|
||||||
return zoneMap->second.begin()->second;
|
return zoneMap->second.begin()->second;
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::TerritoryMgr::updateTerritoryInstances( uint32_t currentTime )
|
void Core::TerritoryMgr::updateTerritoryInstances( uint32_t currentTime )
|
||||||
|
@ -190,7 +188,22 @@ void Core::TerritoryMgr::updateTerritoryInstances( uint32_t currentTime )
|
||||||
for( auto zone : zoneMap.second )
|
for( auto zone : zoneMap.second )
|
||||||
zone.second->runZoneLogic( currentTime );
|
zone.second->runZoneLogic( currentTime );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Core::TerritoryMgr::InstanceIdList Core::TerritoryMgr::getInstanceContentIdList( uint16_t instanceContentId ) const
|
||||||
|
{
|
||||||
|
std::vector< uint32_t > idList;
|
||||||
|
auto zoneMap = m_instanceContentToInstanceMap.find( instanceContentId );
|
||||||
|
if( zoneMap == m_instanceContentToInstanceMap.end() )
|
||||||
|
return idList;
|
||||||
|
|
||||||
|
for( auto& entry : zoneMap->second )
|
||||||
|
{
|
||||||
|
idList.push_back( entry.first );
|
||||||
|
}
|
||||||
|
|
||||||
|
return idList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -87,18 +87,15 @@ namespace Core
|
||||||
/*! removes instance by instanceId, return true if successful */
|
/*! removes instance by instanceId, return true if successful */
|
||||||
bool removeTerritoryInstance( uint32_t territoryTypeId );
|
bool removeTerritoryInstance( uint32_t territoryTypeId );
|
||||||
|
|
||||||
|
/*! returns a ZonePtr to the instance or nullptr if not found */
|
||||||
|
ZonePtr getTerritoryZonePtr( uint32_t instanceId ) const;
|
||||||
|
|
||||||
/*! returns the cached detail of a territory, nullptr if not found */
|
/*! returns the cached detail of a territory, nullptr if not found */
|
||||||
Data::TerritoryTypePtr getTerritoryDetail( uint32_t territoryTypeId ) const;
|
Data::TerritoryTypePtr getTerritoryDetail( uint32_t territoryTypeId ) const;
|
||||||
|
|
||||||
/*! loop for processing territory logic, iterating all existing instances */
|
/*! loop for processing territory logic, iterating all existing instances */
|
||||||
void updateTerritoryInstances( uint32_t currentTime );
|
void updateTerritoryInstances( uint32_t currentTime );
|
||||||
|
|
||||||
/*! pushes a new instances onto the handling map */
|
|
||||||
bool addInstance( ZonePtr pInstance );
|
|
||||||
|
|
||||||
/*! returns a ZonePtr to the instance or nullptr if not found */
|
|
||||||
ZonePtr getInstance( uint32_t instanceId ) const;
|
|
||||||
|
|
||||||
/*! returns a ZonePositionPtr if found, else nullptr */
|
/*! returns a ZonePositionPtr if found, else nullptr */
|
||||||
ZonePositionPtr getTerritoryPosition( uint32_t territoryPositionId ) const;
|
ZonePositionPtr getTerritoryPosition( uint32_t territoryPositionId ) const;
|
||||||
|
|
||||||
|
@ -110,22 +107,33 @@ namespace Core
|
||||||
using TerritoryTypeDetailCache = std::unordered_map< uint16_t, Data::TerritoryTypePtr >;
|
using TerritoryTypeDetailCache = std::unordered_map< uint16_t, Data::TerritoryTypePtr >;
|
||||||
using InstanceIdToZonePtrMap = std::unordered_map< uint32_t, ZonePtr >;
|
using InstanceIdToZonePtrMap = std::unordered_map< uint32_t, ZonePtr >;
|
||||||
using TerritoryIdToInstanceMap = std::unordered_map< uint16_t, InstanceIdToZonePtrMap >;
|
using TerritoryIdToInstanceMap = std::unordered_map< uint16_t, InstanceIdToZonePtrMap >;
|
||||||
|
using InstanceContentIdToInstanceMap = std::unordered_map< uint16_t, InstanceIdToZonePtrMap >;
|
||||||
|
using PlayerIdToInstanceIdMap = std::unordered_map< uint32_t, uint32_t >;
|
||||||
using PositionMap = std::unordered_map< int32_t, ZonePositionPtr >;
|
using PositionMap = std::unordered_map< int32_t, ZonePositionPtr >;
|
||||||
|
using InstanceIdList = std::vector< uint32_t >;
|
||||||
|
|
||||||
/*! map holding details for territory templates */
|
/*! map holding details for territory templates */
|
||||||
TerritoryTypeDetailCache m_territoryTypeDetailCacheMap;
|
TerritoryTypeDetailCache m_territoryTypeDetailCacheMap;
|
||||||
|
|
||||||
/*! map holding actual instances of territories */
|
/*! map holding actual instances of default territories */
|
||||||
TerritoryIdToInstanceMap m_territoryInstanceMap;
|
TerritoryIdToInstanceMap m_territoryInstanceMap;
|
||||||
|
|
||||||
|
/*! map holding actual instances of InstanceContent */
|
||||||
|
InstanceContentIdToInstanceMap m_instanceContentToInstanceMap;
|
||||||
|
|
||||||
|
/*! flat map for easier lookup of instances by guid */
|
||||||
|
InstanceIdToZonePtrMap m_instanceIdToZonePtrMap;
|
||||||
|
|
||||||
/*! map holding positions for zonelines */
|
/*! map holding positions for zonelines */
|
||||||
PositionMap m_territoryPositionMap;
|
PositionMap m_territoryPositionMap;
|
||||||
|
|
||||||
/*! internal counter for instanceIds
|
/*! internal counter for instanceIds */
|
||||||
TODO: it should be ensured that this does not overflow if the server runs for a loooong time
|
|
||||||
( as if that will ever happen ;) ) */
|
|
||||||
uint32_t m_lastInstanceId;
|
uint32_t m_lastInstanceId;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/*! returns a list of instanceContent InstanceIds currently active */
|
||||||
|
InstanceIdList getInstanceContentIdList( uint16_t instanceContentId ) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue