mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-01 08:27:46 +00:00
Implement mount unlocking
This commit is contained in:
parent
e0398b0dbb
commit
575fb37854
6 changed files with 46 additions and 0 deletions
|
@ -899,6 +899,7 @@ namespace Sapphire::Common
|
||||||
KeyItemAction = 1,
|
KeyItemAction = 1,
|
||||||
ItemActionVFX = 852,
|
ItemActionVFX = 852,
|
||||||
ItemActionVFX2 = 944,
|
ItemActionVFX2 = 944,
|
||||||
|
ItemActionMount = 1322,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ActionEffectDisplayType : uint8_t
|
enum ActionEffectDisplayType : uint8_t
|
||||||
|
|
|
@ -278,6 +278,12 @@ namespace Sapphire::Network::ActorControl
|
||||||
*/
|
*/
|
||||||
SetMountSpeed = 0x39F,
|
SetMountSpeed = 0x39F,
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* param1 = mount ID
|
||||||
|
* param2 = unlock/lock (1/0)
|
||||||
|
*/
|
||||||
|
SetMountBitmask = 0x387,
|
||||||
|
|
||||||
Dismount = 0x3A1, // updated 4.5
|
Dismount = 0x3A1, // updated 4.5
|
||||||
|
|
||||||
// Duty Recorder
|
// Duty Recorder
|
||||||
|
|
|
@ -51,6 +51,13 @@ void ItemAction::execute()
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Common::ItemActionType::ItemActionMount:
|
||||||
|
{
|
||||||
|
handleMountItem();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,3 +80,11 @@ void ItemAction::handleVFXItem()
|
||||||
|
|
||||||
m_pSource->sendToInRangeSet( effectPacket, true );
|
m_pSource->sendToInRangeSet( effectPacket, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemAction::handleMountItem()
|
||||||
|
{
|
||||||
|
auto player = getSourceChara()->getAsPlayer();
|
||||||
|
|
||||||
|
player->unlockMount( m_itemAction->data().Calcu0Arg[ 0 ] );
|
||||||
|
player->dropInventoryItem ( static_cast< Common::InventoryType >( m_itemSourceContainer ), m_itemSourceSlot );
|
||||||
|
}
|
|
@ -27,6 +27,8 @@ namespace Sapphire::World::Action
|
||||||
private:
|
private:
|
||||||
void handleVFXItem();
|
void handleVFXItem();
|
||||||
|
|
||||||
|
void handleMountItem();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr< Component::Excel::ExcelStruct< Component::Excel::ItemAction > > m_itemAction;
|
std::shared_ptr< Component::Excel::ExcelStruct< Component::Excel::ItemAction > > m_itemAction;
|
||||||
|
|
||||||
|
|
|
@ -1158,6 +1158,22 @@ const Sapphire::Entity::Player::UnlockList& Sapphire::Entity::Player::getUnlockB
|
||||||
const Sapphire::Entity::Player::OrchestrionList& Sapphire::Entity::Player::getOrchestrionBitmask() const
|
const Sapphire::Entity::Player::OrchestrionList& Sapphire::Entity::Player::getOrchestrionBitmask() const
|
||||||
{
|
{
|
||||||
return m_orchestrion;
|
return m_orchestrion;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sapphire::Entity::Player::unlockMount( uint32_t mountId )
|
||||||
|
{
|
||||||
|
auto& exdData = Common::Service< Data::ExdData >::ref();
|
||||||
|
auto mount = exdData.getRow< Component::Excel::Mount >( mountId );
|
||||||
|
|
||||||
|
Logger::debug("Order: {0}", mount->data().MountOrder);
|
||||||
|
|
||||||
|
if ( mount->data().MountOrder == -1 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_mountGuide[ mount->data().MountOrder / 8 ] |= ( 1 << ( mount->data().MountOrder % 8 ) );
|
||||||
|
|
||||||
|
queuePacket( makeActorControlSelf( getId(), Network::ActorControl::SetMountBitmask, mount->data().MountOrder, 1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
Sapphire::Entity::Player::MountList& Sapphire::Entity::Player::getMountGuideBitmask()
|
Sapphire::Entity::Player::MountList& Sapphire::Entity::Player::getMountGuideBitmask()
|
||||||
|
@ -1379,6 +1395,9 @@ void Sapphire::Entity::Player::setTitle( uint16_t titleId )
|
||||||
|
|
||||||
void Sapphire::Entity::Player::setMaxGearSets( uint8_t amount )
|
void Sapphire::Entity::Player::setMaxGearSets( uint8_t amount )
|
||||||
{
|
{
|
||||||
|
if (amount == 1)
|
||||||
|
amount = 5;
|
||||||
|
|
||||||
m_equippedMannequin = amount;
|
m_equippedMannequin = amount;
|
||||||
|
|
||||||
queuePacket( makeActorControlSelf( getId(), SetMaxGearSets, m_equippedMannequin ) );
|
queuePacket( makeActorControlSelf( getId(), SetMaxGearSets, m_equippedMannequin ) );
|
||||||
|
|
|
@ -464,6 +464,9 @@ namespace Sapphire::Entity
|
||||||
/*! return a const pointer to the orchestrion bitmask array */
|
/*! return a const pointer to the orchestrion bitmask array */
|
||||||
const OrchestrionList& getOrchestrionBitmask() const;
|
const OrchestrionList& getOrchestrionBitmask() const;
|
||||||
|
|
||||||
|
/*! unlock a mount */
|
||||||
|
void unlockMount( uint32_t mountId );
|
||||||
|
|
||||||
/*! return a const pointer to the setMount guide bitmask array */
|
/*! return a const pointer to the setMount guide bitmask array */
|
||||||
MountList& getMountGuideBitmask();
|
MountList& getMountGuideBitmask();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue