1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-24 13:47:46 +00:00

Merge pull request #402 from Squall5668/develop

Add class change on weapon swaps. Also adds a forgotten inventory on character creation.
This commit is contained in:
Mordred 2018-10-19 09:40:12 +02:00 committed by GitHub
commit c35f70fdfc
3 changed files with 18 additions and 17 deletions

View file

@ -319,6 +319,7 @@ void PlayerMinimal::saveAsNew()
createInvDbContainer( InventoryType::ArmoryWrist ); createInvDbContainer( InventoryType::ArmoryWrist );
createInvDbContainer( InventoryType::ArmoryRing ); createInvDbContainer( InventoryType::ArmoryRing );
createInvDbContainer( InventoryType::ArmoryMain ); createInvDbContainer( InventoryType::ArmoryMain );
createInvDbContainer( InventoryType::ArmorySoulCrystal );
createInvDbContainer( InventoryType::Currency ); createInvDbContainer( InventoryType::Currency );
createInvDbContainer( InventoryType::Crystal ); createInvDbContainer( InventoryType::Crystal );

View file

@ -324,7 +324,7 @@ public:
void unequipItem( Common::GearSetSlot equipSlotId, ItemPtr pItem ); void unequipItem( Common::GearSetSlot equipSlotId, ItemPtr pItem );
/*! equip a weapon, possibly forcing a job change */ /*! equip a weapon, possibly forcing a job change */
void equipWeapon( ItemPtr pItem ); void equipWeapon( ItemPtr pItem, bool updateClass );
/*! get player ilvl */ /*! get player ilvl */
uint16_t getItemLevel() const; uint16_t getItemLevel() const;
@ -356,7 +356,7 @@ public:
/*! return the current amount of crystals of type */ /*! return the current amount of crystals of type */
uint32_t getCrystal( uint8_t type ) const; uint32_t getCrystal( uint8_t type ) const;
void updateModels( Common::GearSetSlot equipSlotId, const Core::ItemPtr& pItem ); void updateModels( Common::GearSetSlot equipSlotId, const Core::ItemPtr& pItem, bool updateClass );
Common::GearModelSlot equipSlotToModelSlot( Common::GearSetSlot slot ); Common::GearModelSlot equipSlotToModelSlot( Common::GearSetSlot slot );

View file

@ -114,7 +114,7 @@ void Core::Entity::Player::sendItemLevel()
queuePacket( makeActorControl142( getId(), SetItemLevel, getItemLevel(), 0 ) ); queuePacket( makeActorControl142( getId(), SetItemLevel, getItemLevel(), 0 ) );
} }
void Core::Entity::Player::equipWeapon( ItemPtr pItem ) void Core::Entity::Player::equipWeapon( ItemPtr pItem, bool updateClass )
{ {
auto exdData = g_fw.get< Core::Data::ExdDataGenerated >(); auto exdData = g_fw.get< Core::Data::ExdDataGenerated >();
if( !exdData ) if( !exdData )
@ -122,16 +122,17 @@ void Core::Entity::Player::equipWeapon( ItemPtr pItem )
auto itemInfo = exdData->get< Core::Data::Item >( pItem->getId() ); auto itemInfo = exdData->get< Core::Data::Item >( pItem->getId() );
auto itemClassJob = itemInfo->classJobUse; auto itemClassJob = itemInfo->classJobUse;
auto classJobInfo = exdData->get< Core::Data::ClassJob >( ( uint32_t )getClass() );
auto currentClass = getClass(); auto currentParentClass = static_cast< ClassJob >( classJobInfo->classJobParent );
auto newClassJob = static_cast< ClassJob >( itemClassJob ); auto newClassJob = static_cast< ClassJob >( itemClassJob );
if( isClassJobUnlocked( newClassJob ) ) if( ( isClassJobUnlocked( newClassJob ) ) && ( currentParentClass != newClassJob ) )
return; {
if ( updateClass )
// todo: check if soul crystal is equipped and use job instead
setClassJob( newClassJob ); setClassJob( newClassJob );
else
return;
}
} }
// equip an item // equip an item
@ -139,18 +140,18 @@ void Core::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, ItemPtr p
{ {
//g_framework.getLogger().debug( "Equipping into slot " + std::to_string( equipSlotId ) ); //g_framework.getLogger().debug( "Equipping into slot " + std::to_string( equipSlotId ) );
updateModels( equipSlotId, pItem );
if( sendUpdate ) if( sendUpdate )
{ {
updateModels( equipSlotId, pItem, true );
this->sendModel(); this->sendModel();
m_itemLevel = calculateEquippedGearItemLevel(); m_itemLevel = calculateEquippedGearItemLevel();
sendItemLevel(); sendItemLevel();
} }
else
updateModels( equipSlotId, pItem, false );
} }
void Core::Entity::Player::updateModels( GearSetSlot equipSlotId, const Core::ItemPtr& pItem ) void Core::Entity::Player::updateModels( GearSetSlot equipSlotId, const Core::ItemPtr& pItem, bool updateClass )
{ {
uint64_t model = pItem->getModelId1(); uint64_t model = pItem->getModelId1();
uint64_t model2 = pItem->getModelId2(); uint64_t model2 = pItem->getModelId2();
@ -160,8 +161,7 @@ void Core::Entity::Player::updateModels( GearSetSlot equipSlotId, const Core::It
case MainHand: case MainHand:
m_modelMainWeapon = model; m_modelMainWeapon = model;
m_modelSubWeapon = model2; m_modelSubWeapon = model2;
// TODO: add job change upon changing weapon if needed equipWeapon( pItem, updateClass );
// equipWeapon( pItem );
break; break;
case OffHand: case OffHand: