mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 14:37:44 +00:00
Merge pull request #254 from GokuWeedLord/actor_rewrite
opcodes, ontalk handling in instances, build fix (maybe)
This commit is contained in:
commit
d98ad3b315
13 changed files with 37 additions and 37 deletions
|
@ -206,6 +206,8 @@ namespace Packets {
|
|||
|
||||
FcInfoReqHandler = 0x011A, // updated 4.2
|
||||
|
||||
|
||||
ReqJoinNoviceNetwork = 0x0129, // updated 4.2
|
||||
ReqCountdownInitiate = 0x012C, // updated 4.2
|
||||
ReqCountdownCancel = 0x012D, // updated 4.2
|
||||
|
||||
|
|
|
@ -313,6 +313,12 @@ void Core::Entity::Actor::setCurrentZone( ZonePtr currZone )
|
|||
m_pCurrentZone = currZone;
|
||||
}
|
||||
|
||||
/*! \return InstanceContentPtr to the current instance, null if not an instance or not set */
|
||||
Core::InstanceContentPtr Core::Entity::Actor::getCurrentInstance() const
|
||||
{
|
||||
return getCurrentZone()->getAsInstanceContent();
|
||||
}
|
||||
|
||||
/*!
|
||||
Get the current cell of a region the actor is in
|
||||
|
||||
|
|
|
@ -124,6 +124,8 @@ namespace Entity {
|
|||
ZonePtr getCurrentZone() const;
|
||||
void setCurrentZone( ZonePtr currZone );
|
||||
|
||||
InstanceContentPtr getCurrentInstance() const;
|
||||
|
||||
// get the current cell of a region the actor is in
|
||||
Cell* getCellPtr();
|
||||
// set the current cell
|
||||
|
|
|
@ -734,7 +734,7 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo
|
|||
if( !obj )
|
||||
return;
|
||||
|
||||
instance->updateEObj(obj);
|
||||
//instance->updateEObj(obj);
|
||||
}
|
||||
else if( subCommand == "objstate" )
|
||||
{
|
||||
|
|
|
@ -73,6 +73,8 @@ enum ClientTrigger
|
|||
|
||||
DyeItem = 0x1B5,
|
||||
|
||||
RequestChocoboInventory = 0x1C4,
|
||||
|
||||
Emote = 0x1F4,
|
||||
PersistantEmoteCancel = 0x1F7,
|
||||
PoseChange = 0x1F9,
|
||||
|
@ -95,6 +97,7 @@ enum ClientTrigger
|
|||
CompanionSetBarding = 0x6A5,
|
||||
CompanionActionUnlock = 0x6A6,
|
||||
|
||||
OpenPerformInstrumentUI = 0x71C,
|
||||
};
|
||||
|
||||
void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& inPacket,
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "Actor/Player.h"
|
||||
#include "Forwards.h"
|
||||
#include "Event/EventHelper.h"
|
||||
#include "Zone/InstanceContent.h"
|
||||
|
||||
extern Core::Data::ExdDataGenerated g_exdDataGen;
|
||||
extern Core::Scripting::ScriptManager g_scriptMgr;
|
||||
|
@ -49,7 +50,12 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
|
|||
player.sendDebug( "Calling: " + objName + "." + eventName );
|
||||
player.eventStart( actorId, eventId, Event::EventHandler::Talk, 0, 0 );
|
||||
|
||||
if( !g_scriptMgr.onTalk( player, actorId, eventId ) &&
|
||||
|
||||
if( auto instance = player.getCurrentInstance() )
|
||||
{
|
||||
instance->onTalk( player, eventId, actorId );
|
||||
}
|
||||
else if( !g_scriptMgr.onTalk( player, actorId, eventId ) &&
|
||||
eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||
{
|
||||
auto questInfo = g_exdDataGen.get< Core::Data::Quest >( eventId );
|
||||
|
|
|
@ -87,7 +87,7 @@ public:
|
|||
virtual void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) { }
|
||||
virtual void onNpcKill( uint32_t npcId, Entity::Player& player ) { }
|
||||
virtual void onEmote( uint64_t actorId, uint32_t eventId, uint32_t emoteId, Entity::Player& player ) { }
|
||||
virtual void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
|
||||
virtual void onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
|
||||
virtual void onWithinRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z ) { }
|
||||
virtual void onOutsideRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z ) { }
|
||||
virtual void onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, uint64_t targetId ) { }
|
||||
|
@ -122,7 +122,7 @@ public:
|
|||
|
||||
virtual void onInit( InstanceContentPtr instance ) { }
|
||||
virtual void onUpdate( InstanceContentPtr instance, uint32_t currTime ) { }
|
||||
virtual void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
|
||||
virtual void onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
|
||||
};
|
||||
|
||||
#endif
|
|
@ -42,6 +42,10 @@ foreach(_scriptDir ${children})
|
|||
add_library("script_${_name}" MODULE "${SCRIPT_BUILD_FILES}" "${SCRIPT_INCLUDE_FILES}" "${_scriptDir}/ScriptLoader.cpp")
|
||||
target_link_libraries("script_${_name}" sapphire_zone)
|
||||
|
||||
if(MSVC)
|
||||
target_link_libraries("script_${_name}" ${Boost_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties("script_${_name}" PROPERTIES
|
||||
CXX_STANDARD 14
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#include "Network/PacketWrappers/ActorControlPacket142.h"
|
||||
#include "Network/PacketWrappers/ActorControlPacket143.h"
|
||||
|
||||
#include "Event/EventHandler.h"
|
||||
|
||||
extern Core::Logger g_log;
|
||||
extern Core::Scripting::ScriptManager g_scriptMgr;
|
||||
|
||||
|
@ -253,4 +255,7 @@ Core::Entity::EventObjectPtr Core::InstanceContent::getEObjByName( const std::st
|
|||
return it->second;
|
||||
}
|
||||
|
||||
|
||||
void Core::InstanceContent::onTalk( Core::Entity::Player& player, uint32_t eventId, uint64_t actorId )
|
||||
{
|
||||
auto type = static_cast< Core::Event::EventHandler::EventType >( eventId >> 16 );
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ public:
|
|||
void onFinishLoading( Entity::Player& player ) override;
|
||||
void onInitDirector( Entity::Player& player ) override;
|
||||
void onUpdate( uint32_t currTime ) override;
|
||||
void onTalk( Entity::Player& player, uint32_t eventId, uint64_t actorId );
|
||||
|
||||
void onRegisterEObj( Entity::EventObjectPtr object ) override;
|
||||
|
||||
|
|
|
@ -115,9 +115,9 @@ bool Core::TerritoryMgr::createDefaultTerritories()
|
|||
g_log.Log( LoggingSeverity::info, std::to_string( territoryId ) +
|
||||
"\t" + std::to_string( guid ) +
|
||||
"\t" + std::to_string( territoryInfo->territoryIntendedUse ) +
|
||||
"\t" + territoryInfo->name +
|
||||
"\t" + pPlaceName->name +
|
||||
"\t" + ( isPrivateTerritory( territoryId ) ? "PRIVATE" : "PUBLIC" ) );
|
||||
"\t" + ( territoryInfo->name.length() <= 4 ? territoryInfo->name + "\t" : territoryInfo->name ) +
|
||||
"\t" + ( isPrivateTerritory( territoryId ) ? "PRIVATE" : "PUBLIC" ) +
|
||||
"\t" + pPlaceName->name );
|
||||
|
||||
auto pZone = make_Zone( territoryId, guid, territoryInfo->name, pPlaceName->name );
|
||||
pZone->init();
|
||||
|
|
|
@ -679,34 +679,6 @@ Core::Entity::EventObjectPtr Core::Zone::getEObj( uint32_t objId )
|
|||
return obj->second;
|
||||
}
|
||||
|
||||
// TODO: this is located wrong. state change should happen in the object and it should send to his in range set.
|
||||
void Core::Zone::updateEObj( Entity::EventObjectPtr object )
|
||||
{
|
||||
if( !object )
|
||||
return;
|
||||
|
||||
for( const auto& playerIt : m_playerMap )
|
||||
{
|
||||
// send that packet with le data
|
||||
ZoneChannelPacket< FFXIVIpcObjectSpawn > eobjStatePacket( playerIt.second->getId() );
|
||||
eobjStatePacket.data().objKind = object->getObjKind();
|
||||
eobjStatePacket.data().state = object->getState();
|
||||
eobjStatePacket.data().objId = object->getId();
|
||||
eobjStatePacket.data().hierachyId = object->getMapLinkId();
|
||||
eobjStatePacket.data().position = object->getPos();
|
||||
|
||||
// ????
|
||||
//eobjStatePacket.data().levelId = 4236873;
|
||||
//eobjStatePacket.data().unknown2 = 5;
|
||||
//eobjStatePacket.data().unknown1C = 1065353216;
|
||||
//eobjStatePacket.data().unknown20 = 2147423605;
|
||||
//eobjStatePacket.data().actorId = 1074105831;
|
||||
//eobjStatePacket.data().unknown = 1;
|
||||
|
||||
playerIt.second->queuePacket( eobjStatePacket );
|
||||
}
|
||||
}
|
||||
|
||||
Core::InstanceContentPtr Core::Zone::getAsInstanceContent()
|
||||
{
|
||||
return boost::dynamic_pointer_cast< InstanceContent, Zone >( shared_from_this() );
|
||||
|
|
|
@ -113,7 +113,6 @@ public:
|
|||
|
||||
void registerEObj( Entity::EventObjectPtr object );
|
||||
Entity::EventObjectPtr getEObj( uint32_t objId );
|
||||
void updateEObj( Entity::EventObjectPtr object );
|
||||
|
||||
InstanceContentPtr getAsInstanceContent();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue