1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 06:47:45 +00:00

fixed playerstates being set incorrectly

This commit is contained in:
Mordred 2017-08-13 18:28:05 +02:00
parent a1999590b1
commit 2fe10bda85
5 changed files with 37 additions and 18 deletions

View file

@ -547,7 +547,6 @@ namespace Core {
enum struct PlayerStateFlag : uint8_t enum struct PlayerStateFlag : uint8_t
{ {
NoFlag = 0,
NoCombat, NoCombat,
Combat, Combat,
Casting, Casting,
@ -560,11 +559,10 @@ namespace Core {
Occupied3, Occupied3,
BoundByDuty, BoundByDuty,
Occupied4, Occupied4,
NewAdventurer, DuelingArea,
TradeOpen, TradeOpen,
BrowsingBazaar, Occupied5,
HandlingItems, HandlingItems,
Crafting, Crafting,
PreparingToCraft, PreparingToCraft,
Gathering, Gathering,
@ -573,10 +571,9 @@ namespace Core {
BetweenAreas, BetweenAreas,
Stealthed, Stealthed,
InnRoom, InnRoom,
Jumping, Jumping,
AutoRun, AutoRun,
Occupied5, Occupied6,
BetweenAreas1, BetweenAreas1,
SystemError, SystemError,
LoggingOut, LoggingOut,
@ -607,7 +604,13 @@ namespace Core {
WaitingForRaceOrMatch, WaitingForRaceOrMatch,
WaitingForTripleTriadMatch, WaitingForTripleTriadMatch,
InFlight, InFlight,
WatchingCutscene1 WatchingCutscene1,
DeepDungeon,
Swimming,
Diving,
RegisteringTripleTriad,
WaitingTripleTriad,
InCrossWorldParty
}; };

View file

@ -48,7 +48,7 @@ void Core::Action::EventAction::onStart()
m_startTime = Util::getTimeMs(); m_startTime = Util::getTimeMs();
auto control = ActorControlPacket142( m_pSource->getId(), Common::ActorControlType::CastStart, auto control = ActorControlPacket142( m_pSource->getId(), Common::ActorControlType::CastStart,
1, m_id, 0x4000002F ); 1, m_id, 0x4000004E );
if( m_pSource->isPlayer() ) if( m_pSource->isPlayer() )
{ {

View file

@ -554,14 +554,14 @@ bool Core::Entity::Player::isNewAdventurer() const
void Core::Entity::Player::setNewAdventurer( bool state ) void Core::Entity::Player::setNewAdventurer( bool state )
{ {
if( !state ) //if( !state )
{ //{
unsetStateFlag( PlayerStateFlag::NewAdventurer ); // unsetStateFlag( PlayerStateFlag::NewAdventurer );
} //}
else //else
{ //{
setStateFlag( PlayerStateFlag::NewAdventurer ); // setStateFlag( PlayerStateFlag::NewAdventurer );
} //}
sendStateFlags(); sendStateFlags();
m_bNewAdventurer = state; m_bNewAdventurer = state;
setSyncFlag( PlayerSyncFlags::NewAdventurer ); setSyncFlag( PlayerSyncFlags::NewAdventurer );
@ -1014,6 +1014,20 @@ void Core::Entity::Player::setStateFlag( Core::Common::PlayerStateFlag flag )
} }
void Core::Entity::Player::setStateFlags( std::vector< Common::PlayerStateFlag > flags )
{
for( const auto& flag : flags )
{
int iFlag = static_cast< uint32_t >( flag );
uint16_t index;
uint8_t value;
Util::valueToFlagByteIndexValue( iFlag, value, index );
m_stateFlags[index] |= value;
}
}
void Core::Entity::Player::sendStateFlags() void Core::Entity::Player::sendStateFlags()
{ {
queuePacket( PlayerStateFlagsPacket( getAsPlayer() ) ); queuePacket( PlayerStateFlagsPacket( getAsPlayer() ) );

View file

@ -386,6 +386,8 @@ public:
const uint8_t* getStateFlags() const; const uint8_t* getStateFlags() const;
/* set a specified state flag */ /* set a specified state flag */
void setStateFlag( Common::PlayerStateFlag flag ); void setStateFlag( Common::PlayerStateFlag flag );
/* set a specified state flag */
void setStateFlags( std::vector< Common::PlayerStateFlag > flags );
/* check if a specified flag is set */ /* check if a specified flag is set */
bool hasStateFlag( Common::PlayerStateFlag flag ) const; bool hasStateFlag( Common::PlayerStateFlag flag ) const;
/* reset a specified flag */ /* reset a specified flag */

View file

@ -203,8 +203,8 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession )
if( m_hp == 0 ) if( m_hp == 0 )
m_status = ActorStatus::Dead; m_status = ActorStatus::Dead;
if( m_bNewAdventurer ) // if( m_bNewAdventurer )
setStateFlag( PlayerStateFlag::NewAdventurer ); // setStateFlag( PlayerStateFlag::NewAdventurer );
setStateFlag( PlayerStateFlag::BetweenAreas ); setStateFlag( PlayerStateFlag::BetweenAreas );