diff --git a/src/servers/sapphire_zone/Actor/GameObject.cpp b/src/servers/sapphire_zone/Actor/GameObject.cpp index 44ade97c..d3fda65e 100644 --- a/src/servers/sapphire_zone/Actor/GameObject.cpp +++ b/src/servers/sapphire_zone/Actor/GameObject.cpp @@ -5,3 +5,55 @@ Core::Entity::GameObject::GameObject( ObjKind type ) : { } + +uint32_t Core::Entity::GameObject::getId() const +{ + return m_id; +} + +Core::Entity::GameObject::ObjKind Core::Entity::GameObject::getObjKind() const +{ + return m_objKind; +} + +Core::Common::FFXIVARR_POSITION3& Core::Entity::GameObject::getPos() +{ + return m_pos; +} + +void Core::Entity::GameObject::setPos( float x, float y, float z ) +{ + m_pos.x = x; + m_pos.y = y; + m_pos.z = z; +} + +void Core::Entity::GameObject::setPos( const Core::Common::FFXIVARR_POSITION3& pos ) +{ + m_pos = pos; +} + +float Core::Entity::GameObject::getRot() const +{ + return m_rot; +} + +void Core::Entity::GameObject::setRot( float rot ) +{ + m_rot = rot; +} + +bool Core::Entity::GameObject::isPlayer() const +{ + return m_objKind == ObjKind::Player; +} + +bool Core::Entity::GameObject::isBNpc() const +{ + return m_objKind == ObjKind::BattleNpc; +} + +bool Core::Entity::GameObject::isENpc() const +{ + return m_objKind == ObjKind::EventNpc; +} \ No newline at end of file diff --git a/src/servers/sapphire_zone/Actor/GameObject.h b/src/servers/sapphire_zone/Actor/GameObject.h index fe1efe03..89cb020a 100644 --- a/src/servers/sapphire_zone/Actor/GameObject.h +++ b/src/servers/sapphire_zone/Actor/GameObject.h @@ -50,8 +50,8 @@ namespace Core { ObjKind m_objKind; public: - GameObject( ObjKind type ); - virtual ~GameObject() {}; + explicit GameObject( ObjKind type ); + //virtual ~GameObject() {}; uint32_t getId() const; diff --git a/src/servers/sapphire_zone/Actor/InstanceObject.cpp b/src/servers/sapphire_zone/Actor/InstanceObject.cpp new file mode 100644 index 00000000..4e7a474f --- /dev/null +++ b/src/servers/sapphire_zone/Actor/InstanceObject.cpp @@ -0,0 +1,47 @@ +#include "InstanceObject.h" +#include "Zone/InstanceContent.h" + +Core::Entity::InstanceObject::InstanceObject( uint32_t objectId, uint32_t hierachyId ) : + Core::Entity::GameObject( ObjKind::EventObj ), + m_hierachyId( hierachyId ) +{ + m_id = objectId; +} + +Core::Entity::InstanceObject::InstanceObject( uint32_t objectId, uint32_t hierachyId, Common::FFXIVARR_POSITION3 pos ) + : InstanceObject( objectId, hierachyId ) +{ + +} + +uint32_t Core::Entity::InstanceObject::getHierachyId() const +{ + return m_hierachyId; +} + +void Core::Entity::InstanceObject::setHierachyId( uint32_t hierachyId ) +{ + m_hierachyId = hierachyId; +} + +uint8_t Core::Entity::InstanceObject::getState() const +{ + return m_state; +} + +void Core::Entity::InstanceObject::setState( uint8_t state ) +{ + m_state = state; + + m_parentInstance->updateInstanceObj( InstanceObjectPtr( this ) ); +} + +void Core::Entity::InstanceObject::setParentInstance( Core::InstanceContentPtr instance ) +{ + m_parentInstance = instance; +} + +Core::InstanceContentPtr Core::Entity::InstanceObject::getParentInstance() const +{ + return m_parentInstance; +} \ No newline at end of file diff --git a/src/servers/sapphire_zone/Actor/InstanceObject.h b/src/servers/sapphire_zone/Actor/InstanceObject.h new file mode 100644 index 00000000..03ed1f47 --- /dev/null +++ b/src/servers/sapphire_zone/Actor/InstanceObject.h @@ -0,0 +1,33 @@ +#ifndef SAPPHIRE_INSTANCEOBJECT_H +#define SAPPHIRE_INSTANCEOBJECT_H + +#include "GameObject.h" + +namespace Core +{ +namespace Entity +{ + class InstanceObject : public GameObject + { + public: + InstanceObject( uint32_t objectId, uint32_t hierachyId ); + InstanceObject( uint32_t objectId, uint32_t hierachyId, Common::FFXIVARR_POSITION3 pos ); + + uint32_t getHierachyId() const; + void setHierachyId( uint32_t hierachyId ); + + uint8_t getState() const; + void setState( uint8_t state ); + + InstanceContentPtr getParentInstance() const; + void setParentInstance( InstanceContentPtr instance ); + + protected: + uint32_t m_hierachyId; + uint8_t m_state; + InstanceContentPtr m_parentInstance; + }; +} +} + +#endif //SAPPHIRE_INSTANCEOBJECT_H diff --git a/src/servers/sapphire_zone/Forwards.h b/src/servers/sapphire_zone/Forwards.h index 54bfaa1a..936a458d 100644 --- a/src/servers/sapphire_zone/Forwards.h +++ b/src/servers/sapphire_zone/Forwards.h @@ -13,6 +13,7 @@ namespace Core { TYPE_FORWARD( Cell ); TYPE_FORWARD( Zone ); + TYPE_FORWARD( InstanceContent ); TYPE_FORWARD( Item ); TYPE_FORWARD( ItemContainer ); TYPE_FORWARD( Inventory ); @@ -33,6 +34,7 @@ namespace Core TYPE_FORWARD( BattleNpc ); TYPE_FORWARD( EventNpc ); TYPE_FORWARD( BattleNpcTemplate ); + TYPE_FORWARD( InstanceObject ); } namespace Event diff --git a/src/servers/sapphire_zone/Script/NativeScriptApi.h b/src/servers/sapphire_zone/Script/NativeScriptApi.h index 72c0fac6..893dc6cd 100644 --- a/src/servers/sapphire_zone/Script/NativeScriptApi.h +++ b/src/servers/sapphire_zone/Script/NativeScriptApi.h @@ -8,6 +8,7 @@ #include #include #include +#include #ifdef _MSC_VER #define EXPORT __declspec( dllexport ) @@ -48,7 +49,7 @@ public: class StatusEffectScript : public ScriptObject { public: - StatusEffectScript( uint32_t effectId ) : + explicit StatusEffectScript( uint32_t effectId ) : ScriptObject( effectId, typeid( StatusEffectScript ).hash_code() ) { } @@ -66,7 +67,7 @@ public: class ActionScript : public ScriptObject { public: - ActionScript( uint32_t abilityId ) : + explicit ActionScript( uint32_t abilityId ) : ScriptObject( abilityId, typeid( ActionScript ).hash_code() ) { } @@ -79,7 +80,7 @@ public: class EventScript : public ScriptObject { public: - EventScript( uint32_t questId ) : + explicit EventScript( uint32_t questId ) : ScriptObject( questId, typeid( EventScript ).hash_code() ) { } @@ -97,7 +98,7 @@ public: class BattleNpcScript : public ScriptObject { public: - BattleNpcScript( uint32_t npcId ) : + explicit BattleNpcScript( uint32_t npcId ) : ScriptObject( npcId, typeid( BattleNpcScript ).hash_code() ) { } }; @@ -105,11 +106,22 @@ public: class ZoneScript : public ScriptObject { public: - ZoneScript( uint32_t zoneId ) : + explicit ZoneScript( uint32_t zoneId ) : ScriptObject( zoneId, typeid( ZoneScript ).hash_code() ) { } virtual void onZoneInit() { } }; +class InstanceContentScript : public ScriptObject +{ +public: + explicit InstanceContentScript( uint32_t instanceContentId ) : + ScriptObject( instanceContentId, typeid( InstanceContentScript ).hash_code() ) + { } + + virtual void onInit( InstanceContent& instance ) { } + virtual void onUpdate( InstanceContent& instance, uint32_t currTime ) { } +}; + #endif \ No newline at end of file diff --git a/src/servers/sapphire_zone/Script/ScriptManager.cpp b/src/servers/sapphire_zone/Script/ScriptManager.cpp index 2467fa07..d6024b81 100644 --- a/src/servers/sapphire_zone/Script/ScriptManager.cpp +++ b/src/servers/sapphire_zone/Script/ScriptManager.cpp @@ -332,7 +332,7 @@ bool Core::Scripting::ScriptManager::onStatusTimeOut( Entity::ActorPtr pActor, u bool Core::Scripting::ScriptManager::onZoneInit( ZonePtr pZone ) { - auto script = m_nativeScriptManager->getScript< ZoneScript >(pZone->getTerritoryId() ); + auto script = m_nativeScriptManager->getScript< ZoneScript >( pZone->getTerritoryId() ); if( script ) { script->onZoneInit(); @@ -342,6 +342,30 @@ bool Core::Scripting::ScriptManager::onZoneInit( ZonePtr pZone ) return false; } +bool Core::Scripting::ScriptManager::onInstanceInit( InstanceContent& instance ) +{ + auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance.getInstanceContentId() ); + if( script ) + { + script->onInit( instance ); + return true; + } + + return false; +} + +bool Core::Scripting::ScriptManager::onInstanceUpdate( InstanceContent& instance, uint32_t currTime ) +{ + auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance.getInstanceContentId() ); + if( script ) + { + script->onUpdate( instance, currTime ); + return true; + } + + return false; +} + Scripting::NativeScriptManager& Core::Scripting::ScriptManager::getNativeScriptHandler() { return *m_nativeScriptManager; diff --git a/src/servers/sapphire_zone/Script/ScriptManager.h b/src/servers/sapphire_zone/Script/ScriptManager.h index 958412a0..634afefb 100644 --- a/src/servers/sapphire_zone/Script/ScriptManager.h +++ b/src/servers/sapphire_zone/Script/ScriptManager.h @@ -59,6 +59,8 @@ namespace Core bool onEventHandlerReturn( Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param1, uint16_t param2, uint16_t param3 ); bool onEventHandlerTradeReturn( Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param, uint32_t catalogId ); + bool onInstanceInit( InstanceContent& instance ); + bool onInstanceUpdate( InstanceContent& instance, uint32_t currTime ); void loadDir( const std::string& dirname, std::set &files, const std::string& ext ); diff --git a/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in b/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in index 4530fb82..739b32af 100644 --- a/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in +++ b/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in @@ -1,8 +1,5 @@ -#include #include