mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-25 11:07:45 +00:00
enter dwarf house
This commit is contained in:
parent
1d2945542b
commit
7e09643b20
9 changed files with 91 additions and 5 deletions
|
@ -395,6 +395,8 @@ namespace Sapphire::Network::ActorControl
|
||||||
|
|
||||||
RequestEventBattle = 0x232C,
|
RequestEventBattle = 0x232C,
|
||||||
|
|
||||||
|
Trigger612 = 0x264,
|
||||||
|
|
||||||
QuestJournalUpdateQuestVisibility = 0x2BE,
|
QuestJournalUpdateQuestVisibility = 0x2BE,
|
||||||
QuestJournalClosed = 0x2BF,
|
QuestJournalClosed = 0x2BF,
|
||||||
|
|
||||||
|
|
|
@ -376,6 +376,7 @@ namespace Sapphire::Network::Packets
|
||||||
|
|
||||||
PerformNoteHandler = 0x029B, // updated 4.3
|
PerformNoteHandler = 0x029B, // updated 4.3
|
||||||
|
|
||||||
|
MapInteractionHandler = 0x0285, // updated 5.25
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -344,6 +344,16 @@ struct FFXIVIpcFreeCompanyUpdateShortMessageHandler :
|
||||||
uint16_t unknown2;
|
uint16_t unknown2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct FFXIVIpcMapInteractionHandler :
|
||||||
|
FFXIVIpcBasePacket< MapInteractionHandler >
|
||||||
|
{
|
||||||
|
uint32_t action;
|
||||||
|
uint32_t unknown2;
|
||||||
|
uint64_t unknown3;
|
||||||
|
uint32_t unknown4;
|
||||||
|
Common::FFXIVARR_POSITION3 position;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //_CORE_NETWORK_PACKETS_ZONE_CLIENT_IPC_H
|
#endif //_CORE_NETWORK_PACKETS_ZONE_CLIENT_IPC_H
|
||||||
|
|
|
@ -535,20 +535,30 @@ void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEf
|
||||||
sendStatusEffectUpdate(); // although client buff displays correctly without this but retail sends it so we do it as well
|
sendStatusEffectUpdate(); // although client buff displays correctly without this but retail sends it so we do it as well
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param )
|
void Sapphire::Entity::Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param, bool sendActorControl )
|
||||||
{
|
{
|
||||||
auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 );
|
auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 );
|
||||||
effect->setParam( param );
|
effect->setParam( param );
|
||||||
|
if( sendActorControl )
|
||||||
|
{
|
||||||
|
auto p = makeActorControl( getId(), Network::ActorControl::StatusEffectGain, id, 0, 0, 0 );
|
||||||
|
sendToInRangeSet( p, true );
|
||||||
|
}
|
||||||
addStatusEffect( effect );
|
addStatusEffect( effect );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param )
|
void Sapphire::Entity::Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param, bool sendActorControl )
|
||||||
{
|
{
|
||||||
if( getStatusEffectById( id ).second )
|
if( getStatusEffectById( id ).second )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 );
|
auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 );
|
||||||
effect->setParam( param );
|
effect->setParam( param );
|
||||||
|
if( sendActorControl )
|
||||||
|
{
|
||||||
|
auto p = makeActorControl( getId(), Network::ActorControl::StatusEffectGain, id, 0, 0, 0 );
|
||||||
|
sendToInRangeSet( p, true );
|
||||||
|
}
|
||||||
addStatusEffect( effect );
|
addStatusEffect( effect );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -174,10 +174,10 @@ namespace Sapphire::Entity
|
||||||
const uint32_t* getModelArray() const;
|
const uint32_t* getModelArray() const;
|
||||||
|
|
||||||
// add a status effect by id
|
// add a status effect by id
|
||||||
void addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param = 0 );
|
void addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param = 0, bool sendActorControl = false );
|
||||||
|
|
||||||
// add a status effect by id if it doesn't exist
|
// add a status effect by id if it doesn't exist
|
||||||
void addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param = 0 );
|
void addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param = 0, bool sendActorControl = false );
|
||||||
|
|
||||||
/// End Status Effect Functions
|
/// End Status Effect Functions
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,8 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH
|
||||||
setZoneHandler( ClientZoneIpcType::MarketBoardRequestItemListings, "MarketBoardRequestItemListings",
|
setZoneHandler( ClientZoneIpcType::MarketBoardRequestItemListings, "MarketBoardRequestItemListings",
|
||||||
&GameConnection::marketBoardRequestItemListings );
|
&GameConnection::marketBoardRequestItemListings );
|
||||||
|
|
||||||
|
setZoneHandler( ClientZoneIpcType::MapInteractionHandler, "MapInteractionHandler", &GameConnection::eventHandlerMapInteraction );
|
||||||
|
|
||||||
setChatHandler( ClientChatIpcType::TellReq, "TellReq", &GameConnection::tellHandler );
|
setChatHandler( ClientChatIpcType::TellReq, "TellReq", &GameConnection::tellHandler );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,8 @@ namespace Sapphire::Network
|
||||||
|
|
||||||
DECLARE_HANDLER( eventHandlerShop );
|
DECLARE_HANDLER( eventHandlerShop );
|
||||||
|
|
||||||
|
DECLARE_HANDLER( eventHandlerMapInteraction );
|
||||||
|
|
||||||
DECLARE_HANDLER( eventHandlerLinkshell );
|
DECLARE_HANDLER( eventHandlerLinkshell );
|
||||||
|
|
||||||
DECLARE_HANDLER( logoutHandler );
|
DECLARE_HANDLER( logoutHandler );
|
||||||
|
|
|
@ -489,7 +489,11 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( const Packets::FFX
|
||||||
player.sendDebug( "event battle level sync: {0}, ilevel sync?: {1}", param12, param2 );
|
player.sendDebug( "event battle level sync: {0}, ilevel sync?: {1}", param12, param2 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ClientTriggerType::Trigger612:
|
||||||
|
{
|
||||||
|
player.sendStateFlags();
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
Logger::debug( "[{0}] Unhandled action: {1:04X}", m_pSession->getId(), commandId );
|
Logger::debug( "[{0}] Unhandled action: {1:04X}", m_pSession->getId(), commandId );
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
#include <Network/PacketDef/Zone/ClientZoneDef.h>
|
#include <Network/PacketDef/Zone/ClientZoneDef.h>
|
||||||
|
|
||||||
#include "Network/GameConnection.h"
|
#include "Network/GameConnection.h"
|
||||||
|
#include <Network/CommonActorControl.h>
|
||||||
|
#include "Network/PacketWrappers/ActorControlPacket.h"
|
||||||
|
#include "Network/PacketWrappers/ActorControlSelfPacket.h"
|
||||||
#include "Network/PacketWrappers/ServerNoticePacket.h"
|
#include "Network/PacketWrappers/ServerNoticePacket.h"
|
||||||
#include "Network/PacketWrappers/EventStartPacket.h"
|
#include "Network/PacketWrappers/EventStartPacket.h"
|
||||||
#include "Network/PacketWrappers/EventFinishPacket.h"
|
#include "Network/PacketWrappers/EventFinishPacket.h"
|
||||||
|
@ -273,5 +276,57 @@ void Sapphire::Network::GameConnection::eventHandlerShop( const Packets::FFXIVAR
|
||||||
scriptMgr.onTalk( player, player.getId(), eventId );
|
scriptMgr.onTalk( player, player.getId(), eventId );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sapphire::Network::GameConnection::eventHandlerMapInteraction( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||||
|
Entity::Player& player )
|
||||||
|
{
|
||||||
|
const auto packet = ZoneChannelPacket< Client::FFXIVIpcMapInteractionHandler >( inPacket );
|
||||||
|
if( packet.data().action == 0xD4 && player.getRace() == 3 ) // enter dwarf house lalafell only of course
|
||||||
|
{
|
||||||
|
// looks like shit but IT WORKS.
|
||||||
|
auto x = packet.data().position.x;
|
||||||
|
auto z = packet.data().position.z;
|
||||||
|
if( x < -448 && x > -453 )
|
||||||
|
{
|
||||||
|
// west
|
||||||
|
if( x > -451 )
|
||||||
|
{
|
||||||
|
// enter
|
||||||
|
auto p = makeActorControl( player.getId(), 242, 1174189454, 817758208, 67, 0 );
|
||||||
|
queueOutPacket( p );
|
||||||
|
player.addStatusEffectById( 1945, 0, player, 0, true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// exit
|
||||||
|
auto p = makeActorControl( player.getId(), 242, 1182315916, 827392000, 68, 0 );
|
||||||
|
queueOutPacket( p );
|
||||||
|
player.removeSingleStatusEffectById( 1945 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( x > 637 && x < 641 )
|
||||||
|
{
|
||||||
|
// east
|
||||||
|
if( z > -188 )
|
||||||
|
{
|
||||||
|
// enter
|
||||||
|
auto p = makeActorControl( player.getId(), 242, 3521816124, 1737687040, 69, 0 );
|
||||||
|
queueOutPacket( p );
|
||||||
|
player.addStatusEffectById( 1945, 0, player, 0, true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// exit
|
||||||
|
auto p = makeActorControl( player.getId(), 242, 3517228601, 1749483520, 70, 0 );
|
||||||
|
queueOutPacket( p );
|
||||||
|
player.removeSingleStatusEffectById( 1945 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.sendDebug( "Unknown dwarf house." );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue