1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-25 11:07:45 +00:00

merge instance def and useful wraptaxies from the_movie

This commit is contained in:
collett 2021-01-25 18:29:10 +09:00
parent 9df185a7c5
commit 3e5d0a47f0
21 changed files with 486 additions and 1 deletions

View file

@ -0,0 +1,32 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131088 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131088() :
Sapphire::ScriptAPI::EventScript( 131088 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.sendDebug( "enter the walking sand..." );
auto instance = player.getOrCreatePrivateInstance( 212 );
if( instance )
{
Common::FFXIVARR_POSITION3 pos { 30, 1, 0 };
player.setInstance( instance, pos );
}
}
};
EXPOSE_SCRIPT( WarpTaxi131088 );

View file

@ -0,0 +1,28 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131091 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131091() :
Sapphire::ScriptAPI::EventScript( 131091 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.sendDebug( "exit the walking sand..." );
player.sendUrgent( "to go to other side of the door, walk up against it and type \"!nudge 4\"." );
player.exitInstance();
}
};
EXPOSE_SCRIPT( WarpTaxi131091 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131137 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131137() :
Sapphire::ScriptAPI::EventScript( 131137 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.setPosAndSendActorMove( 24.7, 20.1, -679.2, 0.82 );
}
};
EXPOSE_SCRIPT( WarpTaxi131137 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131142 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131142() :
Sapphire::ScriptAPI::EventScript( 131142 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.setPosAndSendActorMove( 0, -2, -31, 3.1415 );
}
};
EXPOSE_SCRIPT( WarpTaxi131142 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131143 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131143() :
Sapphire::ScriptAPI::EventScript( 131143 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.setPosAndSendActorMove( 0, -2, -23, 0 );
}
};
EXPOSE_SCRIPT( WarpTaxi131143 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131144 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131144() :
Sapphire::ScriptAPI::EventScript( 131144 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.enterPredefinedPrivateInstance( 351 );
}
};
EXPOSE_SCRIPT( WarpTaxi131144 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131166 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131166() :
Sapphire::ScriptAPI::EventScript( 131166 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.enterPredefinedPrivateInstance( 395 );
}
};
EXPOSE_SCRIPT( WarpTaxi131166 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131180 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131180() :
Sapphire::ScriptAPI::EventScript( 131180 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.forceZoneing( 144, -42, 0, 100, -1.58, true );
}
};
EXPOSE_SCRIPT( WarpTaxi131180 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131185 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131185() :
Sapphire::ScriptAPI::EventScript( 131185 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.forceZoneing( 418, 0, -2.6, 141.3, -3.1415, true );
}
};
EXPOSE_SCRIPT( WarpTaxi131185 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131186 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131186() :
Sapphire::ScriptAPI::EventScript( 131186 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.forceZoneing( 155, -165, 304, -325, 0.78, true );
}
};
EXPOSE_SCRIPT( WarpTaxi131186 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131192 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131192() :
Sapphire::ScriptAPI::EventScript( 131192 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.enterPredefinedPrivateInstance( 433 );
}
};
EXPOSE_SCRIPT( WarpTaxi131192 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131201 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131201() :
Sapphire::ScriptAPI::EventScript( 131201 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.enterPredefinedPrivateInstance( 463 );
}
};
EXPOSE_SCRIPT( WarpTaxi131201 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131256 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131256() :
Sapphire::ScriptAPI::EventScript( 131256 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.setPosAndSendActorMove( 676, 60, 465, 0 );
}
};
EXPOSE_SCRIPT( WarpTaxi131256 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131261 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131261() :
Sapphire::ScriptAPI::EventScript( 131261 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.enterPredefinedPrivateInstance( 639 );
}
};
EXPOSE_SCRIPT( WarpTaxi131261 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131264 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131264() :
Sapphire::ScriptAPI::EventScript( 131264 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.enterPredefinedPrivateInstance( 681 );
}
};
EXPOSE_SCRIPT( WarpTaxi131264 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131268 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131268() :
Sapphire::ScriptAPI::EventScript( 131268 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.forceZoneing( 614, -491.1, 1.137, 540.47, 2.258, true );
}
};
EXPOSE_SCRIPT( WarpTaxi131268 );

View file

@ -0,0 +1,26 @@
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Network/GamePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
using namespace Sapphire;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server;
class WarpTaxi131293 : public Sapphire::ScriptAPI::EventScript
{
public:
WarpTaxi131293() :
Sapphire::ScriptAPI::EventScript( 131293 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
player.eventFinish( getId(), 1 );
player.forceZoneing( 759, 146.2, -4.17, 55.15, 0, true );
}
};
EXPOSE_SCRIPT( WarpTaxi131293 );

View file

@ -2787,6 +2787,19 @@ void* Sapphire::Entity::Player::getTerritoryMgr()
return &Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
}
void Sapphire::Entity::Player::setPosAndSendActorMove( float x, float y, float z, float rot )
{
setRot( rot );
setPos( x, y, z, true );
auto setActorPosPacket = makeZonePacket< FFXIVIpcActorSetPos >( getId() );
setActorPosPacket->data().r16 = Common::Util::floatToUInt16Rot( rot );
setActorPosPacket->data().x = x;
setActorPosPacket->data().y = y;
setActorPosPacket->data().z = z;
queuePacket( setActorPosPacket );
}
Sapphire::TerritoryPtr Sapphire::Entity::Player::getOrCreatePrivateInstance( uint32_t zoneId )
{
auto instance = m_privateInstanceMap[ zoneId ];

View file

@ -1047,6 +1047,7 @@ namespace Sapphire::Entity
void foreachPartyMember( std::function< void( PlayerPtr member ) > callback);
//////////////////////////////////////////////////////////////////////////////////////////////////////
void setPosAndSendActorMove( float x, float y, float z, float rot );
std::unordered_map< uint32_t, TerritoryPtr > m_privateInstanceMap;
TerritoryPtr getOrCreatePrivateInstance( uint32_t zoneId );
bool enterPredefinedPrivateInstance( uint32_t zoneId );

View file

@ -644,6 +644,11 @@ bool Sapphire::World::Manager::TerritoryMgr::movePlayer( TerritoryPtr pZone, Sap
// map player to instanceId so it can be tracked.
m_playerIdToInstanceMap[ pPlayer->getId() ] = pZone->getGuId();
}
else
{
pPlayer->removeFromInRange();
pPlayer->clearInRangeSet();
}
pPlayer->sendZonePackets();
@ -714,6 +719,14 @@ std::unordered_map< uint32_t, Sapphire::World::Manager::TerritoryMgr::InstanceSp
{ 507, { { -0.7, 0, 11.5 }, 3.1415 } },
{ 636, { { 0, 0, 8 }, -3.1416 } },
{ 680, { { 0, 16.35, -16.46 }, 0 } },
{ 639, { { 0, 0, 10 }, -3.14 } },
{ 681, { { 20, -1, 15 }, -2.25 } },
{ 682, { { 144.15, -4.178, 55 }, 0 } },
{ 683, { { 0, -5.169, 30 }, -3.14 } },
{ 727, { { -454, 383, -127 }, 1.578 } },
{ 738, { { 0, -2, 55 }, -3.14 } },
{ 737, { { 250, 122, -346 }, -3.14 } },
{ 744, { { 0, 0, 0 }, 0 } },
};
std::unordered_map< uint32_t, uint32_t > Sapphire::World::Manager::TerritoryMgr::instanceExitEvent =
@ -734,4 +747,12 @@ std::unordered_map< uint32_t, uint32_t > Sapphire::World::Manager::TerritoryMgr:
{ 131213, 507 },
{ 131247, 636 },
{ 131274, 680 },
{ 131260, 639 },
{ 131266, 681 },
//{ 131268, 682 }, scripted
{ 131273, 683 },
{ 131276, 727 },
{ 131286, 738 },
{ 131289, 737 },
{ 131294, 744 },
};

View file

@ -173,7 +173,7 @@ void Sapphire::Network::GameConnection::updatePositionHandler( const Packets::FF
Entity::Player& player )
{
// if the player is marked for zoning we no longer want to update his pos
if( player.isMarkedForZoning() )
if( player.isMarkedForZoning() || !player.isLoadingComplete() )
return;
const auto updatePositionPacket = ZoneChannelPacket< Client::FFXIVIpcUpdatePosition >( inPacket );