1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-12 13:37:46 +00:00

Send linkshell action result after creation of linkshells.

This commit is contained in:
Mordred 2021-12-03 22:21:18 +01:00
parent c2826ddc21
commit 3023a78533
5 changed files with 54 additions and 5 deletions

View file

@ -121,6 +121,18 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
int16_t ResultCount;
};
struct FFXIVIpcLinkshellResult : FFXIVIpcBasePacket< LinkshellResult >
{
uint64_t LinkshellID;
uint64_t TargetCharacterID;
uint32_t UpPacketNo;
uint32_t Result;
uint8_t UpdateStatus;
uint8_t Identity;
char LinkshellName[32];
char TargetName[32];
};
struct FFXIVIpcInviteResult : FFXIVIpcBasePacket< InviteResult >
{
uint32_t Result;

View file

@ -36,7 +36,7 @@ public:
}
};
eventMgr().playScene( player, getId(), 1, 0, callback );
eventMgr().playScene( player, getId(), 1, HIDE_HOTBAR | NO_DEFAULT_CAMERA, callback );
}
// create linkshell
@ -46,24 +46,31 @@ public:
{
auto ls = linkshellMgr().createLinkshell( result.resultString, player );
if( !ls )
{
eventMgr().resumeScene( player, result.eventId, result.sceneId, { 0x15a } );
linkshellMgr().finishLinkshellCreation( result.resultString, 0x15a, player );
}
else
{
eventMgr().resumeScene( player, result.eventId, result.sceneId, { 0 } );
linkshellMgr().finishLinkshellCreation( result.resultString, 0, player );
}
};
eventMgr().playScene( player, getId(), 2, 0, callback );
eventMgr().playScene( player, getId(), 2, HIDE_HOTBAR, callback );
}
// rename linkshell
void Scene00003( Entity::Player& player )
{
eventMgr().playScene( player, getId(), 3, 0 );
eventMgr().playScene( player, getId(), 3, HIDE_HOTBAR );
}
// remove linkshell
void Scene00004( Entity::Player& player )
{
eventMgr().playScene( player, getId(), 4, 0 );
eventMgr().playScene( player, getId(), 4, HIDE_HOTBAR );
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override

View file

@ -548,7 +548,6 @@ void EventMgr::resumeScene( Entity::Player& player, uint32_t eventId, uint32_t s
if( !pEvent )
return;
pEvent->setPlayedScene( false );
pEvent->setEventReturnCallback( nullptr );
auto resumeEvent = makeZonePacket< FFXIVIpcResumeEventScene2 >( player.getId() );
resumeEvent->data().handlerId = eventId;

View file

@ -1,16 +1,33 @@
#include <algorithm>
#include <iterator>
#include <Common.h>
#include <Exd/ExdData.h>
#include <Util/Util.h>
#include <Service.h>
#include <Logging/Logger.h>
#include <Database/DatabaseDef.h>
#include <Service.h>
#include <Manager/ChatChannelMgr.h>
#include <Network/GamePacket.h>
#include "Linkshell/Linkshell.h"
#include "LinkshellMgr.h"
#include "Actor/Player.h"
#include "WorldServer.h"
#include <Network/GameConnection.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::World::Manager;
bool Sapphire::World::Manager::LinkshellMgr::loadLinkshells()
{
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -154,6 +171,18 @@ Sapphire::LinkshellPtr Sapphire::World::Manager::LinkshellMgr::createLinkshell(
return lsPtr;
}
void Sapphire::World::Manager::LinkshellMgr::finishLinkshellCreation( const std::string& name, uint32_t result, Entity::Player& player )
{
auto& server = Common::Service< World::WorldServer >::ref();
auto linkshellResult = makeZonePacket< FFXIVIpcLinkshellResult >( player.getId() );
linkshellResult->data().Result = result;
linkshellResult->data().UpPacketNo = 1;
linkshellResult->data().Identity = 0xFF;
strcpy( linkshellResult->data().LinkshellName, name.c_str() );
server.queueForPlayer( player.getCharacterId(), linkshellResult );
}
const std::vector< Sapphire::LinkshellPtr > Sapphire::World::Manager::LinkshellMgr::getPlayerLinkshells( Entity::Player& player ) const
{

View file

@ -25,6 +25,8 @@ namespace Sapphire::World::Manager
// create new linkshell entry and insert into db
LinkshellPtr createLinkshell( const std::string& name, Entity::Player& player );
void finishLinkshellCreation( const std::string& name, uint32_t result, Entity::Player& player );
// get all linkshells associated with player
const std::vector< LinkshellPtr > getPlayerLinkshells( Entity::Player& player ) const;