diff --git a/.appveyor.yml b/.appveyor.yml
index fb30afe4..6bbe22d5 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -9,8 +9,8 @@ platform:
environment:
MSVC_DEFAULT_OPTIONS: ON
- BOOST_ROOT_DIR: "C:\\Libraries\\boost_1_60_0"
- BOOST_LIB_DIR: "C:\\Libraries\\boost_1_60_0\\lib32-msvc-14.0"
+ BOOST_ROOT_DIR: "C:\\Libraries\\boost_1_63_0"
+ BOOST_LIB_DIR: "C:\\Libraries\\boost_1_63_0\\lib32-msvc-14.0"
MYSQL_PWD: "Password12!"
services:
diff --git a/.gitignore b/.gitignore
index 0747ffb3..f057cbaf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,6 +38,7 @@ build/
*.la
*.a
*.lib
+*.exp
# Executables
*.exe
diff --git a/.travis.yml b/.travis.yml
index 21eb7833..d8158ae9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -29,9 +29,9 @@ cache:
before_install:
- eval "${MATRIX_EVAL}"
- gem install --no-ri --no-rdoc mtime_cache
+ - sudo add-apt-repository -y ppa:rexut/recoil
- sudo apt-get update
- - sudo apt-get install -y libboost-dev libboost-all-dev
- - sudo apt-get install -y libmysqlclient-dev libmysqlcppconn-dev
+ - sudo apt-get install -y libboost1.63-dev libboost1.63-all-dev
# Build steps
script:
@@ -39,6 +39,6 @@ script:
- mtime_cache src/**/*.{%{cpp}} -c .mtime_cache/cache.json
- mkdir -p build
- cd build
- - cmake .. -DSAPPHIRE_BOOST_VER="1.54.0" && make -j 3
+ - cmake .. -DSAPPHIRE_BOOST_VER="1.63.0" && make -j 3
- cd ..
- bash sql_import.sh
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 997abb3d..54f7d380 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,8 +4,9 @@ project (Sapphire)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
-set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
-set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
+set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
+set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
+set(EXECUTABLE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
@@ -42,7 +43,6 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/servers/Server_Common/Version.cp
##########################################################################
# Common include folders
-include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src/libraries/external/ChaiScript-6.0.0/include/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src/libraries/sapphire/datReader/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src/libraries/sapphire/mysqlConnector/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/src")
@@ -66,3 +66,5 @@ add_subdirectory("src/tools/exd_struct_gen")
add_subdirectory("src/tools/exd_struct_test")
add_subdirectory("src/tools/quest_parser")
add_subdirectory("src/tools/pcb_reader")
+
+add_subdirectory("scripts/native")
diff --git a/bin/config/settings_rest.xml b/bin/config/settings_rest.xml
index ddadaf67..e3059921 100644
--- a/bin/config/settings_rest.xml
+++ b/bin/config/settings_rest.xml
@@ -6,7 +6,7 @@
127.0.0.1
- C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
+ H:\\SteamLibrary\\steamapps\\common\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
127.0.0.1
diff --git a/bin/config/settings_zone.xml b/bin/config/settings_zone.xml
index 18d33bf6..a0d56a0a 100644
--- a/bin/config/settings_zone.xml
+++ b/bin/config/settings_zone.xml
@@ -1,14 +1,26 @@
-
54992
127.0.0.1
- C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
+ H:\\SteamLibrary\\steamapps\\common\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
+
+
+
+ ./compiledscripts/
+ ./cache/
+
+
+ 1
+ ../cmake-build-debug/
+ cmake --build %1% --target %2%
+
+
+
- ../scripts/chai
+ ./compiledscripts/
127.0.0.1
diff --git a/cmake/mysql.cmake b/cmake/mysql.cmake
index 7e3ceccf..77106bc9 100644
--- a/cmake/mysql.cmake
+++ b/cmake/mysql.cmake
@@ -11,6 +11,7 @@ if(UNIX)
/usr/local/mysql/include/mysql
$ENV{ProgramFiles}/MySQL/*/include
$ENV{SystemDrive}/MySQL/*/include
+ ${LIBRARY_DIR}/external/MySQL/
)
if(MYSQL_INCLUDE_DIR)
diff --git a/scripts/native/CMakeLists.txt b/scripts/native/CMakeLists.txt
new file mode 100644
index 00000000..334c9f01
--- /dev/null
+++ b/scripts/native/CMakeLists.txt
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 3.0)
+project(Sapphire_Script)
+
+file(GLOB SCRIPT_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
+file(GLOB_RECURSE SCRIPT_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
+
+include_directories("${CMAKE_SOURCE_DIR}/src/servers/")
+include_directories("${CMAKE_SOURCE_DIR}/src/servers/Server_Zone/")
+
+if(MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Yc${CMAKE_CURRENT_SOURCE_DIR}/ScriptObject.h /FI${CMAKE_CURRENT_SOURCE_DIR}/ScriptObject.h")
+endif()
+
+message( "exec: ${EXECUTABLE_OUTPUT_DIRECTORY}" )
+
+set( SCRIPT_LIB_DIR "${EXECUTABLE_OUTPUT_DIRECTORY}/compiledscripts/" )
+set( EXECUTABLE_OUTPUT_PATH "${SCRIPT_LIB_DIR}")
+set( LIBRARY_OUTPUT_PATH "${SCRIPT_LIB_DIR}")
+set( RUNTIME_OUTPUT_DIRECTORY "${SCRIPT_LIB_DIR}")
+
+foreach(_sourcefile ${SCRIPT_FILES})
+ get_filename_component(_file "${_sourcefile}" NAME_WE)
+ add_library("${_file}" MODULE "${_sourcefile}" "${SCRIPT_INCLUDE_FILES}")
+
+ if(MSVC)
+ set_source_files_properties("${_file}" PROPERTIES
+ COMPILE_FLAGS "/Yc${CMAKE_CURRENT_SOURCE_DIR}/ScriptObject.h"
+ )
+ set_target_properties(${_file} PROPERTIES
+ CXX_STANDARD 14
+ CXX_STANDARD_REQUIRED ON
+ CXX_EXTENSIONS ON
+ LIBRARY_OUTPUT_DIRECTORY_DEBUG "${SCRIPT_LIB_DIR}"
+ LIBRARY_OUTPUT_DIRECTORY_RELEASE "${SCRIPT_LIB_DIR}"
+ LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${SCRIPT_LIB_DIR}"
+ LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${SCRIPT_LIB_DIR}"
+ )
+ endif()
+
+ target_link_libraries("${_file}" server_zone)
+
+ add_custom_command(TARGET "${_file}" POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/${_file}.exp"
+ COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/${_file}.lib"
+ COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/${_file}.ilk"
+ )
+endforeach(_sourcefile ${SCRIPT_FILES})
\ No newline at end of file
diff --git a/scripts/native/CmnDef/CmnDefCutSceneReplay.cpp b/scripts/native/CmnDef/CmnDefCutSceneReplay.cpp
new file mode 100644
index 00000000..f190b7d5
--- /dev/null
+++ b/scripts/native/CmnDef/CmnDefCutSceneReplay.cpp
@@ -0,0 +1,38 @@
+#include "../ScriptObject.h"
+
+class CmnDefCutSceneReplay : public EventScript
+{
+public:
+ CmnDefCutSceneReplay() : EventScript( "CmnDefCutSceneReplay", 721028 )
+ {}
+
+ void Scene00000( Entity::Player& player )
+ {
+ auto callback = [ this ]( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 )
+ {
+ if( param2 != 0 )
+ {
+ Scene00001( player, param2 );
+ }
+ };
+
+ player.eventPlay( getId(), 0, 0x2000, 0, 1, callback );
+ }
+
+ void Scene00001( Entity::Player& player, uint16_t returnScene )
+ {
+ auto callback = []( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 )
+ {
+ // todo: this is fucked
+ };
+
+ player.eventPlay( getId(), 1, 0xFB2EC8F8, 0, 1, returnScene, callback );
+ }
+
+ void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
+ {
+ Scene00000( player );
+ }
+};
+
+EXPORT_SCRIPTOBJECT( CmnDefCutSceneReplay )
\ No newline at end of file
diff --git a/scripts/native/CmnDef/CmnDefInnBed.cpp b/scripts/native/CmnDef/CmnDefInnBed.cpp
new file mode 100644
index 00000000..0238eeac
--- /dev/null
+++ b/scripts/native/CmnDef/CmnDefInnBed.cpp
@@ -0,0 +1,58 @@
+#include "../ScriptObject.h"
+
+class CmnDefInnBed : public EventScript
+{
+public:
+ CmnDefInnBed() : EventScript( "CmnDefInnBed", 720916 )
+ {}
+
+ // menu
+ void Scene00000( Entity::Player& player )
+ {
+ auto callback = [ this ]( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 )
+ {
+ if( param2 > 0 )
+ Scene00001( player, param2 );
+ };
+
+ player.eventPlay( getId(), 0, 0x2000, 0, 1, callback );
+ }
+
+ // lay down
+ void Scene00001( Entity::Player& player, uint16_t param )
+ {
+ auto callback = [ this ]( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 )
+ {
+ Scene00002( player, param2 );
+ };
+
+ player.eventPlay( getId(), 1, 0xF32E48F8, 0, 1, param, callback );
+ }
+
+ // logout
+ void Scene00002( Entity::Player& player, uint16_t param )
+ {
+ player.eventPlay( getId(), 2, 0xF32E48F8, 0, 1, param, nullptr );
+ }
+
+ // wake up
+ void Scene00100( Entity::Player& player )
+ {
+ auto callback = []( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 )
+ {};
+
+ player.eventPlay( getId(), 100, 0x800, 0, 0, callback );
+ }
+
+ void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
+ {
+ Scene00000( player );
+ }
+
+ void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override
+ {
+ Scene00100( player );
+ }
+};
+
+EXPORT_SCRIPTOBJECT( CmnDefInnBed )
\ No newline at end of file
diff --git a/scripts/native/CmnDef/CmnDefLinkShell.cpp b/scripts/native/CmnDef/CmnDefLinkShell.cpp
new file mode 100644
index 00000000..b85b2d9b
--- /dev/null
+++ b/scripts/native/CmnDef/CmnDefLinkShell.cpp
@@ -0,0 +1,60 @@
+#include "../ScriptObject.h"
+
+#define ACTION_CREATE 2
+#define ACTION_RENAME 3
+#define ACTION_REMOVE 4
+
+class CmnDefLinkShell : public EventScript
+{
+public:
+ CmnDefLinkShell() : EventScript( "CmnDefLinkShell", 0xB0006 )
+ {}
+
+ void Scene00001( Entity::Player& player )
+ {
+ auto callback = [ this ]( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 )
+ {
+ switch( param2 )
+ {
+ case ACTION_CREATE:
+ Scene00002( player );
+ break;
+
+ case ACTION_RENAME:
+ Scene00003( player );
+ break;
+
+ case ACTION_REMOVE:
+ Scene00004( player );
+ break;
+ }
+ };
+
+ player.eventPlay( getId(), 1, 0, 0, 0, callback );
+ }
+
+ // create linkshell
+ void Scene00002( Entity::Player& player )
+ {
+ player.eventPlay( getId(), 2, 0, 0, 0 );
+ }
+
+ // rename linkshell
+ void Scene00003( Entity::Player& player )
+ {
+ player.eventPlay( getId(), 3, 0, 0, 0 );
+ }
+
+ // remove linkshell
+ void Scene00004( Entity::Player& player )
+ {
+ player.eventPlay( getId(), 4, 0, 0, 0 );
+ }
+
+ void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
+ {
+ Scene00001( player );
+ }
+};
+
+EXPORT_SCRIPTOBJECT( CmnDefLinkShell )
\ No newline at end of file
diff --git a/scripts/native/CmnDef/HouFurOrchestrion.cpp b/scripts/native/CmnDef/HouFurOrchestrion.cpp
new file mode 100644
index 00000000..6544712c
--- /dev/null
+++ b/scripts/native/CmnDef/HouFurOrchestrion.cpp
@@ -0,0 +1,20 @@
+#include "../ScriptObject.h"
+
+class HouFurOrchestrionDef : public EventScript
+{
+public:
+ HouFurOrchestrionDef() : EventScript( "HouFurOrchestrionDef", 721226 )
+ {}
+
+ void Scene00000( Entity::Player& player )
+ {
+ player.eventPlay( getId(), 0, 0x2000, 0, 1 );
+ }
+
+ void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
+ {
+ Scene00000( player );
+ }
+};
+
+EXPORT_SCRIPTOBJECT( HouFurOrchestrionDef )
\ No newline at end of file
diff --git a/scripts/native/ScriptObject.h b/scripts/native/ScriptObject.h
new file mode 100644
index 00000000..108b8df0
--- /dev/null
+++ b/scripts/native/ScriptObject.h
@@ -0,0 +1,10 @@
+#ifndef SAPPHIRE_SCRIPTOBJECT_H
+#define SAPPHIRE_SCRIPTOBJECT_H
+
+#include