Added environment variable to set location of mod.

Multiple units selection and path drawing added.
This commit is contained in:
Pax1601
2022-11-21 13:00:01 +01:00
parent ed193b6c78
commit 0c6142bf17
15 changed files with 7474 additions and 68 deletions

View File

@@ -14,10 +14,18 @@ Source: "..\scripts\OlympusExport.lua"; DestDir: "{app}\Scripts"; Flags: ignorev
Source: "..\scripts\OlympusHook.lua"; DestDir: "{app}\Scripts\Hooks"; Flags: ignoreversion Source: "..\scripts\OlympusHook.lua"; DestDir: "{app}\Scripts\Hooks"; Flags: ignoreversion
Source: "..\scripts\OlympusCommand.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion Source: "..\scripts\OlympusCommand.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion
Source: "..\scripts\OlympusMission.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion Source: "..\scripts\OlympusMission.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion
Source: "..\bin\x64\Release\*.dll"; DestDir: "{app}\Mods\Services\Olympus\bin"; Flags: ignoreversion; Source: "..\scripts\mist_4_4_90.lua"; DestDir: "{app}\Mods\Services\Olympus\Scripts"; Flags: ignoreversion
Source: "..\bin\*.dll"; DestDir: "{app}\Mods\Services\Olympus\bin"; Flags: ignoreversion;
[Code] [Code]
procedure AppendExportString(); procedure AppendExportString();
begin begin
SaveStringToFile(ExpandConstant('{app}\Scripts\Export.lua'), #13#10 + 'local Olympuslfs=require(''lfs'');dofile(Olympuslfs.writedir()..''Scripts/OlympusExport.lua'')' + #13#10, True); SaveStringToFile(ExpandConstant('{app}\Scripts\Export.lua'), #13#10 + 'local Olympuslfs=require(''lfs'');dofile(Olympuslfs.writedir()..''Scripts/OlympusExport.lua'')' + #13#10, True);
end; end;
[Registry]
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName: "OLYMPUS"; ValueData: "{app}\Mods\Services\Olympus"; Flags: preservestringtype
[Setup]
; Tell Windows Explorer to reload the environment
ChangesEnvironment=yes

View File

@@ -2,26 +2,16 @@ Olympus = {}
Olympus.OlympusDLL = nil Olympus.OlympusDLL = nil
Olympus.cppRESTDLL = nil Olympus.cppRESTDLL = nil
Olympus.DLLsloaded = false Olympus.DLLsloaded = false
Olympus.debug = true Olympus.OlympusModPath = os.getenv('OLYMPUS')..'\\bin\\'
if Olympus.debug then
Olympus.OlympusModPath = "C:\\Users\\dpass\\Documents\\Olympus\\bin\\x64\\Debug\\"
else
Olympus.OlympusModPath = "C:\\Users\\dpass\\Doczuments\\Olympus\\bin\\x64\\Release\\"
end
log.write('Olympus.EXPORT.LUA', log.INFO,'Executing OlympusExport.lua') log.write('Olympus.EXPORT.LUA', log.INFO, 'Executing OlympusExport.lua')
function Olympus.loadDLLs() function Olympus.loadDLLs()
-- Add the .dll paths -- Add the .dll paths
package.cpath = package.cpath..';'..Olympus.OlympusModPath..'?.dll;' package.cpath = package.cpath..';'..Olympus.OlympusModPath..'?.dll;'
if Olympus.debug then log.write('Olympus.EXPORT.LUA', log.INFO, 'Loading cpprest_2_10.dll from ['..Olympus.OlympusModPath..']')
log.write('Olympus.EXPORT.LUA', log.INFO, 'Loading cpprest_2_10d.dll from ['..Olympus.OlympusModPath..']') pcall(require, 'cpprest_2_10')
pcall(require, 'cpprest_2_10d')
else
log.write('Olympus.EXPORT.LUA', log.INFO, 'Loading cpprest_2_10.dll from ['..Olympus.OlympusModPath..']')
pcall(require, 'cpprest_2_10')
end
log.write('Olympus.EXPORT.LUA', log.INFO, 'Loading Olympus.dll from ['..Olympus.OlympusModPath..']') log.write('Olympus.EXPORT.LUA', log.INFO, 'Loading Olympus.dll from ['..Olympus.OlympusModPath..']')
local status local status

View File

@@ -2,12 +2,7 @@ Olympus = {}
Olympus.OlympusDLL = nil Olympus.OlympusDLL = nil
Olympus.cppRESTDLL = nil Olympus.cppRESTDLL = nil
Olympus.DLLsloaded = false Olympus.DLLsloaded = false
Olympus.debug = true Olympus.OlympusModPath = os.getenv('OLYMPUS')..'\\bin\\'
if Olympus.debug then
Olympus.OlympusModPath = "C:\\Users\\dpass\\Documents\\Olympus\\bin\\x64\\Debug\\"
else
Olympus.OlympusModPath = "C:\\Users\\dpass\\Doczuments\\Olympus\\bin\\x64\\Release\\"
end
log.write('Olympus.HOOKS.LUA', log.INFO,'Executing OlympusHook.lua') log.write('Olympus.HOOKS.LUA', log.INFO,'Executing OlympusHook.lua')
@@ -15,13 +10,8 @@ function loadDLLs()
-- Add the .dll paths -- Add the .dll paths
package.cpath = package.cpath..';'..Olympus.OlympusModPath..'?.dll;' package.cpath = package.cpath..';'..Olympus.OlympusModPath..'?.dll;'
if Olympus.debug then log.write('Olympus.HOOKS.LUA', log.INFO, 'Loading cpprest_2_10.dll from ['..Olympus.OlympusModPath..']')
log.write('Olympus.HOOKS.LUA', log.INFO, 'Loading cpprest_2_10d.dll from ['..Olympus.OlympusModPath..']') pcall(require, 'cpprest_2_10')
pcall(require, 'cpprest_2_10d')
else
log.write('Olympus.HOOKS.LUA', log.INFO, 'Loading cpprest_2_10.dll from ['..Olympus.OlympusModPath..']')
pcall(require, 'cpprest_2_10')
end
log.write('Olympus.HOOKS.LUA', log.INFO, 'Loading Olympus.dll from ['..Olympus.OlympusModPath..']') log.write('Olympus.HOOKS.LUA', log.INFO, 'Loading Olympus.dll from ['..Olympus.OlympusModPath..']')
local status local status

7347
scripts/mist_4_4_90.lua Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -59,7 +59,7 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<OutDir>.\..\..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>.\..\..\bin\</OutDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Vcpkg"> <PropertyGroup Label="Vcpkg">
<VcpkgAutoLink>true</VcpkgAutoLink> <VcpkgAutoLink>true</VcpkgAutoLink>

View File

@@ -2,6 +2,7 @@
#include "DCSUtils.h" #include "DCSUtils.h"
#include "Logger.h" #include "Logger.h"
#include "Utils.h"
#define DllExport __declspec( dllexport ) #define DllExport __declspec( dllexport )
@@ -35,13 +36,25 @@ f_coreMissionData coreMissionData = nullptr;
static int onSimulationStart(lua_State* L) static int onSimulationStart(lua_State* L)
{ {
LOGGER->Log("onSimulationStart callback called successfully"); LOGGER->Log("onSimulationStart callback called successfully");
#ifdef _DEBUG
LOGGER->Log("Loading Debug core.dll"); string modLocation;
hGetProcIDDLL = LoadLibrary(L"C:\\Users\\dpass\\Documents\\Olympus\\bin\\x64\\Debug\\core.dll"); string dllLocation;
#else char* buf = nullptr;
LOGGER->Log("Loading Release core.dll"); size_t sz = 0;
hGetProcIDDLL = LoadLibrary(L"C:\\Users\\dpass\\Documents\\Olympus\\bin\\x64\\Release\\core.dll"); if (_dupenv_s(&buf, &sz, "OLYMPUS") == 0 && buf != nullptr)
#endif {
modLocation = buf;
free(buf);
}
else
{
LOGGER->Log("OLYMPUS environment variable is missing");
goto error;
}
dllLocation = modLocation + "\\bin\\core.dll";
LOGGER->Log("Loading core.dll");
hGetProcIDDLL = LoadLibrary(Utils::to_wstring(dllLocation).c_str());
if (!hGetProcIDDLL) { if (!hGetProcIDDLL) {
DCSUtils::LogError(L, "Error loading core DLL"); DCSUtils::LogError(L, "Error loading core DLL");

View File

@@ -98,7 +98,7 @@
<OutDir>.\..\..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>.\..\..\bin\$(Platform)\$(Configuration)\</OutDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>.\..\..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>.\..\..\bin\</OutDir>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>

View File

@@ -5,7 +5,7 @@
using namespace web::http; using namespace web::http;
using namespace web::http::experimental::listener; using namespace web::http::experimental::listener;
class UnitsHandler; class UnitsFactory;
class Scheduler; class Scheduler;
class RESTServer class RESTServer

View File

@@ -4,11 +4,11 @@
class Unit; class Unit;
class UnitsHandler class UnitsFactory
{ {
public: public:
UnitsHandler(lua_State* L); UnitsFactory(lua_State* L);
~UnitsHandler(); ~UnitsFactory();
Unit* getUnit(int ID); Unit* getUnit(int ID);
void getMissionDB(lua_State* L); void getMissionDB(lua_State* L);

View File

@@ -1,28 +1,84 @@
#include "LUAFunctions.h" #include "LUAFunctions.h"
#include "Logger.h" #include "Logger.h"
/* Executes the "OlympusCommand.lua" file to load in the "Server" Lua space all the Lua functions necessary to perform DCS commands (like moving units) */
void LUAFunctions::registerLuaFunctions(lua_State* L) void LUAFunctions::registerLuaFunctions(lua_State* L)
{ {
ifstream f("C:\\Users\\dpass\\Documents\\Olympus\\scripts\\OlympusCommand.lua"); string modLocation;
string str;
if (f) {
ostringstream ss;
ss << f.rdbuf();
str = ss.str();
}
lua_getglobal(L, "net"); char* buf = nullptr;
lua_getfield(L, -1, "dostring_in"); size_t sz = 0;
lua_pushstring(L, "server"); if (_dupenv_s(&buf, &sz, "OLYMPUS") == 0 && buf != nullptr)
lua_pushstring(L, str.c_str());
if (lua_pcall(L, 2, 0, 0) != 0)
{ {
LOGGER->Log("Error registering LUA functions"); modLocation = buf;
free(buf);
} }
else else
{ {
LOGGER->Log("Lua functions registered successfully"); LOGGER->Log("OLYMPUS environment variable is missing");
return;
}
{
ifstream f(modLocation + "\\Scripts\\mist_4_4_90.lua");
string str;
LOGGER->Log("Reading MIST from " + modLocation + "\\Scripts\\mist_4_4_90.lua");
if (f) {
ostringstream ss;
ss << f.rdbuf();
str = ss.str();
LOGGER->Log("MIST read succesfully");
}
else
{
LOGGER->Log("Error reading MIST");
return;
}
lua_getglobal(L, "net");
lua_getfield(L, -1, "dostring_in");
lua_pushstring(L, "server");
lua_pushstring(L, str.c_str());
if (lua_pcall(L, 2, 0, 0) != 0)
{
LOGGER->Log("Error registering MIST");
}
else
{
LOGGER->Log("MIST registered successfully");
}
}
{
ifstream f(modLocation + "\\Scripts\\OlympusCommand.lua");
string str;
LOGGER->Log("Reading OlympusCommand.lua from " + modLocation + "\\Scripts\\OlympusCommand.lua");
if (f) {
ostringstream ss;
ss << f.rdbuf();
str = ss.str();
LOGGER->Log("OlympusCommand.lua read succesfully");
}
else
{
LOGGER->Log("Error reading OlympusCommand.lua");
return;
}
lua_getglobal(L, "net");
lua_getfield(L, -1, "dostring_in");
lua_pushstring(L, "server");
lua_pushstring(L, str.c_str());
if (lua_pcall(L, 2, 0, 0) != 0)
{
LOGGER->Log("Error registering OlympusCommand.lua");
}
else
{
LOGGER->Log("OlympusCommand.lua registered successfully");
}
} }
} }

View File

@@ -5,7 +5,7 @@
#include "Scheduler.h" #include "Scheduler.h"
#include "LUAUtils.h" #include "LUAUtils.h"
extern UnitsHandler* unitsHandler; extern UnitsFactory* unitsHandler;
extern Scheduler* scheduler; extern Scheduler* scheduler;
extern json::value missionData; extern json::value missionData;

View File

@@ -5,7 +5,7 @@
#include "Utils.h" #include "Utils.h"
#include "Unit.h" #include "Unit.h"
extern UnitsHandler* unitsHandler; extern UnitsFactory* unitsHandler;
Scheduler::Scheduler(lua_State* L) Scheduler::Scheduler(lua_State* L)
{ {

View File

@@ -4,17 +4,17 @@
#include "framework.h" #include "framework.h"
#include "Utils.h" #include "Utils.h"
UnitsHandler::UnitsHandler(lua_State* L) UnitsFactory::UnitsFactory(lua_State* L)
{ {
DCSUtils::LogInfo(L, "Units Factory constructor called successfully"); DCSUtils::LogInfo(L, "Units Factory constructor called successfully");
} }
UnitsHandler::~UnitsHandler() UnitsFactory::~UnitsFactory()
{ {
} }
Unit* UnitsHandler::getUnit(int ID) Unit* UnitsFactory::getUnit(int ID)
{ {
if (units.find(ID) == units.end()) { if (units.find(ID) == units.end()) {
return nullptr; return nullptr;
@@ -24,7 +24,7 @@ Unit* UnitsHandler::getUnit(int ID)
} }
} }
void UnitsHandler::update(lua_State* L) void UnitsFactory::update(lua_State* L)
{ {
//lua_getglobal(L, "net"); //lua_getglobal(L, "net");
//lua_getfield(L, -1, "dostring_in"); //lua_getfield(L, -1, "dostring_in");
@@ -45,7 +45,7 @@ void UnitsHandler::update(lua_State* L)
} }
} }
void UnitsHandler::updateAnswer(json::value& answer) void UnitsFactory::updateAnswer(json::value& answer)
{ {
// TODO THREAT SAFEY! // TODO THREAT SAFEY!
auto unitsJson = json::value::object(); auto unitsJson = json::value::object();

View File

@@ -7,13 +7,13 @@
#include "Scheduler.h" #include "Scheduler.h"
#include "LUAFunctions.h" #include "LUAFunctions.h"
auto before = std::chrono::system_clock::now(); auto before = std::chrono::system_clock::now();
UnitsHandler* unitsHandler = nullptr; UnitsFactory* unitsHandler = nullptr;
RESTServer* restserver = nullptr; RESTServer* restserver = nullptr;
Scheduler* scheduler = nullptr; Scheduler* scheduler = nullptr;
json::value missionData; json::value missionData;
/* Standard DllMain entry point */
BOOL APIENTRY DllMain( HMODULE hModule, BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call, DWORD ul_reason_for_call,
LPVOID lpReserved LPVOID lpReserved
@@ -32,6 +32,7 @@ BOOL APIENTRY DllMain( HMODULE hModule,
#define DllExport __declspec( dllexport ) #define DllExport __declspec( dllexport )
/* Called when DCS simulation stops. All singleton instances are deleted. */
extern "C" DllExport int coreDeinit(lua_State* L) extern "C" DllExport int coreDeinit(lua_State* L)
{ {
LOGGER->Log("Olympus coreDeinit called successfully"); LOGGER->Log("Olympus coreDeinit called successfully");
@@ -45,9 +46,10 @@ extern "C" DllExport int coreDeinit(lua_State* L)
return(0); return(0);
} }
/* Called when DCS simulation starts. All singletons are instantiated, and the custom Lua functions are registered in the Lua state. */
extern "C" DllExport int coreInit(lua_State* L) extern "C" DllExport int coreInit(lua_State* L)
{ {
unitsHandler = new UnitsHandler(L); unitsHandler = new UnitsFactory(L);
restserver = new RESTServer(L); restserver = new RESTServer(L);
scheduler = new Scheduler(L); scheduler = new Scheduler(L);

View File

@@ -84,7 +84,7 @@
</ImportGroup> </ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>.\..\..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>.\..\..\bin\</OutDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>.\..\..\bin\$(Platform)\$(Configuration)\</OutDir> <OutDir>.\..\..\bin\$(Platform)\$(Configuration)\</OutDir>