2017-12-18 12:36:52 +01:00
|
|
|
#include <common/Common.h>
|
|
|
|
#include <common/Network/PacketDef/Zone/ServerZoneDef.h>
|
|
|
|
#include <common/Network/GamePacket.h>
|
2018-01-31 11:43:22 +01:00
|
|
|
#include <common/Exd/ExdDataGenerated.h>
|
2017-12-18 12:36:52 +01:00
|
|
|
#include <common/Network/PacketContainer.h>
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2017-12-08 15:38:25 +01:00
|
|
|
#include "Network/GameConnection.h"
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2017-12-08 15:38:25 +01:00
|
|
|
#include "Network/PacketWrappers/QuestMessagePacket.h"
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2017-12-19 09:27:22 +01:00
|
|
|
#include "Session.h"
|
|
|
|
#include "Inventory/Inventory.h"
|
2017-08-08 13:53:47 +02:00
|
|
|
#include "Player.h"
|
|
|
|
|
2018-01-31 11:43:22 +01:00
|
|
|
extern Core::Data::ExdDataGenerated g_exdDataGen;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
using namespace Core::Common;
|
|
|
|
using namespace Core::Network::Packets;
|
|
|
|
using namespace Core::Network::Packets::Server;
|
|
|
|
|
|
|
|
void Core::Entity::Player::finishQuest( uint16_t questId )
|
|
|
|
{
|
|
|
|
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2017-10-15 01:43:57 +02:00
|
|
|
removeQuest( questId );
|
|
|
|
updateQuestsCompleted( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
sendQuestTracker();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::unfinishQuest( uint16_t questId )
|
|
|
|
{
|
|
|
|
removeQuestsCompleted( questId );
|
|
|
|
sendQuestInfo();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::removeQuest( uint16_t questId )
|
|
|
|
{
|
|
|
|
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( ( idx != -1 ) && ( m_activeQuests[idx] != nullptr ) )
|
|
|
|
{
|
|
|
|
|
2017-11-21 18:43:09 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcQuestUpdate > questUpdatePacket( getId() );
|
2017-11-28 00:09:36 +01:00
|
|
|
questUpdatePacket.data().slot = static_cast< uint8_t >( idx );
|
2017-08-08 13:53:47 +02:00
|
|
|
questUpdatePacket.data().questInfo.c.questId = 0;
|
|
|
|
questUpdatePacket.data().questInfo.c.sequence = 0xFF;
|
|
|
|
queuePacket( questUpdatePacket );
|
|
|
|
|
2017-11-21 18:43:09 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcQuestFinish > questFinishPacket( getId() );
|
2017-08-08 13:53:47 +02:00
|
|
|
questFinishPacket.data().questId = questId;
|
|
|
|
questFinishPacket.data().flag1 = 1;
|
|
|
|
questFinishPacket.data().flag2 = 1;
|
|
|
|
queuePacket( questFinishPacket );
|
|
|
|
|
2017-08-11 22:56:30 +01:00
|
|
|
for( int32_t ii = 0; ii < 5; ii++ )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
if( m_questTracking[ii] == idx )
|
|
|
|
m_questTracking[ii] = -1;
|
|
|
|
}
|
|
|
|
|
2017-11-28 00:09:36 +01:00
|
|
|
boost::shared_ptr< QuestActive > pQuest = m_activeQuests[idx];
|
2017-08-08 13:53:47 +02:00
|
|
|
m_activeQuests[idx].reset();
|
|
|
|
|
|
|
|
m_questIdToQuestIdx.erase( questId );
|
|
|
|
m_questIdxToQuestId.erase( idx );
|
2017-10-15 01:43:57 +02:00
|
|
|
|
|
|
|
deleteQuest( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
sendQuestTracker();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Core::Entity::Player::hasQuest( uint16_t questId )
|
|
|
|
{
|
|
|
|
return ( getQuestIndex( questId ) > -1 );
|
|
|
|
}
|
|
|
|
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t Core::Entity::Player::getQuestIndex( uint16_t questId )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
auto it = m_questIdToQuestIdx.find( questId );
|
|
|
|
if( it != m_questIdToQuestIdx.end() )
|
|
|
|
return it->second;
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestBitFlag8( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->a.BitFlag8;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestBitFlag16( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->a.BitFlag16;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestBitFlag24( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->a.BitFlag24;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestBitFlag32( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->a.BitFlag32;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestBitFlag40( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->a.BitFlag40;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestBitFlag48( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->a.BitFlag48;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8A( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->c.UI8A;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8B( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->c.UI8B;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8C( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->c.UI8C;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8D( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->c.UI8D;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8E( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->c.UI8E;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8F( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->c.UI8F;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8AH( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8AH;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8BH( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8BH;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8CH( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8CH;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8DH( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8DH;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8EH( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8EH;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8FH( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8FH;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8AL( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8AL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8BL( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8BL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8CL( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8CL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8DL( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8DL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8EL( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8EL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestUI8FL( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint8_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
value = pNewQuest->b.UI8FL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t Core::Entity::Player::getQuestUI16A( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint16_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
// value = pNewQuest->d.UI16A;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t Core::Entity::Player::getQuestUI16B( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint16_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
// value = pNewQuest->d.UI16B;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t Core::Entity::Player::getQuestUI16C( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint16_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
// value = pNewQuest->d.UI16C;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t Core::Entity::Player::getQuestUI32A( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
uint32_t value = 0;
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
// value = pNewQuest->e.UI32A;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8A( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->c.UI8A = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8B( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->c.UI8B = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8C( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->c.UI8C = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8D( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->c.UI8D = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8E( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->c.UI8E = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8F( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->c.UI8F = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8AH( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8AH = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8BH( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8BH = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8CH( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8CH = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8DH( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8DH = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8EH( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8EH = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8FH( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8FH = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8AL( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8AL = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8BL( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8BL = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8CL( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8CL = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8DL( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8DL = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8EL( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8EL = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI8FL( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->b.UI8FL = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI16A( uint16_t questId, uint16_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
// pNewQuest->d.UI16A = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI16B( uint16_t questId, uint16_t val )
|
|
|
|
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
// pNewQuest->d.UI16B = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI16C( uint16_t questId, uint16_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
// pNewQuest->d.UI16C = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestUI32A( uint16_t questId, uint32_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
// pNewQuest->e.UI32A = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestBitFlag8( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->a.BitFlag8 = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestBitFlag16( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->a.BitFlag16 = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestBitFlag24( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->a.BitFlag24 = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void Core::Entity::Player::setQuestBitFlag32( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->a.BitFlag32 = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestBitFlag40( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->a.BitFlag40 = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestBitFlag48( uint16_t questId, uint8_t val )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
|
|
|
|
pNewQuest->a.BitFlag48 = val;
|
|
|
|
|
|
|
|
updateQuest( questId, pNewQuest->c.sequence );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t Core::Entity::Player::getQuestSeq( uint16_t questId )
|
|
|
|
{
|
2017-10-15 01:43:57 +02:00
|
|
|
int8_t idx = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
if( idx != -1 )
|
|
|
|
{
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest = m_activeQuests[idx];
|
|
|
|
return pNewQuest->c.sequence;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2017-10-01 21:50:09 -03:00
|
|
|
void Core::Entity::Player::updateQuest( uint16_t questId, uint8_t sequence )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
if( hasQuest( questId ) )
|
|
|
|
{
|
2017-10-15 23:16:28 +02:00
|
|
|
uint8_t index = getQuestIndex( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
auto pNewQuest = m_activeQuests[index];
|
2017-11-21 18:43:09 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcQuestUpdate > pe_qa( getId() );
|
2017-08-08 13:53:47 +02:00
|
|
|
pNewQuest->c.sequence = sequence;
|
2017-10-15 01:43:57 +02:00
|
|
|
pe_qa.data().slot = index;
|
2017-08-08 13:53:47 +02:00
|
|
|
pe_qa.data().questInfo = *pNewQuest;
|
|
|
|
queuePacket( pe_qa );
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
|
2017-10-15 23:16:28 +02:00
|
|
|
uint8_t idx = 0;
|
|
|
|
bool hasFreeSlot = false;
|
|
|
|
for( ; idx < 30; idx++ )
|
|
|
|
if( !m_activeQuests[idx] )
|
|
|
|
{
|
|
|
|
hasFreeSlot = true;
|
|
|
|
break;
|
|
|
|
}
|
2017-10-15 01:43:57 +02:00
|
|
|
|
2017-10-15 23:16:28 +02:00
|
|
|
if( !hasFreeSlot )
|
|
|
|
return;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
boost::shared_ptr< QuestActive > pNewQuest( new QuestActive() );
|
|
|
|
pNewQuest->c.questId = questId;
|
|
|
|
pNewQuest->c.sequence = sequence;
|
|
|
|
pNewQuest->c.padding = 0;
|
|
|
|
m_activeQuests[idx] = pNewQuest;
|
|
|
|
m_questIdToQuestIdx[questId] = idx;
|
|
|
|
m_questIdxToQuestId[idx] = questId;
|
|
|
|
|
2017-11-21 18:43:09 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcQuestUpdate > pe_qa( getId() );
|
2017-08-08 13:53:47 +02:00
|
|
|
pe_qa.data().slot = idx;
|
|
|
|
pe_qa.data().questInfo = *pNewQuest;
|
|
|
|
queuePacket( pe_qa );
|
|
|
|
|
2017-08-11 22:56:30 +01:00
|
|
|
for( int32_t ii = 0; ii < 5; ii++ )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
if( m_questTracking[ii] == -1 )
|
|
|
|
{
|
|
|
|
m_questTracking[ii] = idx;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-10-15 01:43:57 +02:00
|
|
|
insertQuest( questId, idx, sequence );
|
2017-08-08 13:53:47 +02:00
|
|
|
sendQuestTracker();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::sendQuestTracker()
|
|
|
|
{
|
2017-11-21 18:43:09 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcQuestTracker > trackerPacket( getId() );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2017-08-11 22:56:30 +01:00
|
|
|
for( int32_t ii = 0; ii < 5; ii++ )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
if( m_questTracking[ii] >= 0 )
|
|
|
|
{
|
|
|
|
trackerPacket.data().entry[ii].active = 1;
|
2017-10-22 20:51:25 -07:00
|
|
|
trackerPacket.data().entry[ii].questIndex = static_cast< uint8_t >( m_questTracking[ii] );
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
queuePacket( trackerPacket );
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::setQuestTracker( uint16_t index, int16_t flag )
|
|
|
|
{
|
|
|
|
if( flag == 0 )
|
|
|
|
{
|
|
|
|
//remove
|
|
|
|
for( uint8_t ii = 0; ii < 5; ii++ )
|
|
|
|
{
|
|
|
|
if( m_questTracking[ii] == index )
|
|
|
|
{
|
|
|
|
m_questTracking[ii] = -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
//add
|
|
|
|
for( uint8_t ii = 0; ii < 5; ii++ )
|
|
|
|
{
|
|
|
|
if( m_questTracking[ii] == -1 )
|
|
|
|
{
|
|
|
|
m_questTracking[ii] = index;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Core::Entity::Player::sendQuestInfo()
|
|
|
|
{
|
2017-11-21 18:43:09 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcQuestActiveList > pe_qa( getId() );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2017-08-11 22:56:30 +01:00
|
|
|
for( int32_t i = 0; i < 30; i++ )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
uint8_t offset = i * 12;
|
|
|
|
if( m_activeQuests[i] != nullptr )
|
|
|
|
{
|
|
|
|
|
|
|
|
auto& quest = pe_qa.data().activeQuests[i];
|
|
|
|
quest = *m_activeQuests[i];
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
queuePacket( pe_qa );
|
|
|
|
|
2017-11-21 18:43:09 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcQuestCompleteList > pe_qc( getId() );
|
2018-02-03 02:04:00 +01:00
|
|
|
memcpy( pe_qc.data().questCompleteMask, m_questCompleteFlags, sizeof( m_questCompleteFlags ) );
|
2017-08-08 13:53:47 +02:00
|
|
|
queuePacket( pe_qc );
|
|
|
|
|
|
|
|
sendQuestTracker();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::sendQuestMessage( uint32_t questId, int8_t msgId, uint8_t type, uint32_t var1, uint32_t var2 )
|
|
|
|
{
|
|
|
|
queuePacket( QuestMessagePacket( getAsPlayer(), questId, msgId, type, var1, var2 ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Core::Entity::Player::updateQuestsCompleted( uint32_t questId )
|
|
|
|
{
|
|
|
|
uint8_t index = questId / 8;
|
|
|
|
uint8_t bitIndex = ( questId ) % 8;
|
|
|
|
|
|
|
|
uint8_t value = 0x80 >> bitIndex;
|
|
|
|
|
|
|
|
m_questCompleteFlags[index] |= value;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::Player::removeQuestsCompleted( uint32_t questId )
|
|
|
|
{
|
|
|
|
uint8_t index = questId / 8;
|
|
|
|
uint8_t bitIndex = ( questId ) % 8;
|
|
|
|
|
|
|
|
uint8_t value = 0x80 >> bitIndex;
|
|
|
|
|
|
|
|
m_questCompleteFlags[index] ^= value;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Core::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t optionalChoice )
|
|
|
|
{
|
|
|
|
uint32_t playerLevel = getLevel();
|
2018-02-14 12:31:47 +01:00
|
|
|
auto questInfo = g_exdDataGen.get< Core::Data::Quest >( questId );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
if( !questInfo )
|
|
|
|
return false;
|
|
|
|
|
2018-02-14 12:31:47 +01:00
|
|
|
auto paramGrowth = g_exdDataGen.get< Core::Data::ParamGrow >( questInfo->classJobLevel0 );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2017-11-28 00:09:36 +01:00
|
|
|
// TODO: use the correct formula, this one is wrong
|
2018-01-31 11:43:22 +01:00
|
|
|
uint32_t exp = ( questInfo->expFactor * paramGrowth->questExpModifier * ( 45 + 5 * questInfo->classJobLevel0 ) ) / 100;
|
|
|
|
exp = exp + ( questInfo->expFactor / 100 ) * 10000;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-01-31 11:43:22 +01:00
|
|
|
exp = questInfo->expFactor;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-01-31 11:43:22 +01:00
|
|
|
auto rewardItemCount = questInfo->itemReward0.size();
|
|
|
|
uint16_t optionalItemCount = questInfo->itemReward1.size();
|
2017-08-08 13:53:47 +02:00
|
|
|
|
2018-01-31 11:43:22 +01:00
|
|
|
uint32_t gilReward = questInfo->gilReward;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
// TODO: check if there is room in inventory, else return false;
|
|
|
|
if( exp > 0 )
|
|
|
|
gainExp( exp );
|
|
|
|
|
|
|
|
if( rewardItemCount > 0 )
|
|
|
|
{
|
2018-01-31 11:43:22 +01:00
|
|
|
for( uint32_t i = 0; i < questInfo->itemReward0.size(); i++ )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
2018-02-01 23:32:59 +01:00
|
|
|
addItem( -1, questInfo->itemReward0.at( i ), questInfo->itemCountReward0.at( i ) );
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if( optionalItemCount > 0 )
|
|
|
|
{
|
2018-01-31 11:43:22 +01:00
|
|
|
auto itemId = questInfo->itemReward1.at( optionalChoice );
|
|
|
|
addItem( -1, itemId, questInfo->itemCountReward1.at( optionalChoice ) );
|
2017-08-08 13:53:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if( gilReward > 0 )
|
|
|
|
addCurrency( 1, gilReward );
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
boost::shared_ptr<QuestActive> Core::Entity::Player::getQuestActive( uint16_t index )
|
|
|
|
{
|
|
|
|
return m_activeQuests[index];
|
|
|
|
}
|
|
|
|
|