diff --git a/.github/workflows/msbuild.yml b/.github/workflows/msbuild.yml new file mode 100644 index 0000000..080428f --- /dev/null +++ b/.github/workflows/msbuild.yml @@ -0,0 +1,49 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: MSBuild + +on: + push: + branches: [ "main" ] + +env: + # Path to the solution file relative to the root of the project. + SOLUTION_FILE_PATH: . + + # Configuration type to build. + # You can convert this to a build matrix if you need coverage of multiple configuration types. + # https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + BUILD_CONFIGURATION: Release + +permissions: + contents: write + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v3 + + - name: Add MSBuild to PATH + uses: microsoft/setup-msbuild@v1.0.2 + + - name: Restore NuGet packages + working-directory: ${{env.GITHUB_WORKSPACE}} + run: nuget restore ${{env.SOLUTION_FILE_PATH}} + + - name: Build + working-directory: ${{env.GITHUB_WORKSPACE}} + # Add additional options to the MSBuild command line here (like platform or verbosity level). + # See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference + run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}} + + - name: Archive files + uses: actions/upload-artifact@v4 + with: + name: arcdps_integration64 + path: | + x64/arcdps_integration64.dll diff --git a/GW2Nexus-ArcDPSBridge.vcxproj b/GW2Nexus-ArcDPSBridge.vcxproj index db94361..1f27c7f 100644 --- a/GW2Nexus-ArcDPSBridge.vcxproj +++ b/GW2Nexus-ArcDPSBridge.vcxproj @@ -45,9 +45,13 @@ $(SolutionDir)$(Platform)\ + $(Platform)\ + arcdps_integration64 $(SolutionDir)$(Platform)\ + $(Platform)\ + arcdps_integration64 diff --git a/src/entry.cpp b/src/entry.cpp index 217372c..5113cd7 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -33,12 +33,9 @@ struct EvCombatData void AddonLoad(AddonAPI* aApi); void AddonUnload(); -AddonDefinition* AddonDef = nullptr; +AddonDefinition AddonDef = {}; AddonAPI* APIDefs = nullptr; -std::mutex Mutex; -std::vector evCombatEvents; - arcdps_exports arc_exports; uint32_t cbtcount = 0; extern "C" __declspec(dllexport) void* get_init_addr(char* arcversion, ImGuiContext* imguictx, void* id3dptr, HANDLE arcdll, void* mallocfn, void* freefn, uint32_t d3dversion); @@ -51,20 +48,20 @@ uintptr_t mod_combat(const char* channel, cbtevent* ev, ag* src, ag* dst, char* extern "C" __declspec(dllexport) AddonDefinition* GetAddonDef() { - AddonDef = new AddonDefinition(); - AddonDef->Signature = -19392669; - AddonDef->APIVersion = NEXUS_API_VERSION; - AddonDef->Name = "Nexus ArcDPS Bridge"; - AddonDef->Version.Major = 1; - AddonDef->Version.Minor = 0; - AddonDef->Version.Build = 0; - AddonDef->Version.Revision = 1; - AddonDef->Author = "Raidcore"; - AddonDef->Description = "Adds events for the ArcDPS combat API."; - AddonDef->Load = AddonLoad; - AddonDef->Unload = AddonUnload; - - return AddonDef; + AddonDef.Signature = -19392669; + AddonDef.APIVersion = NEXUS_API_VERSION; + AddonDef.Name = "Nexus ArcDPS Bridge"; + AddonDef.Version.Major = 1; + AddonDef.Version.Minor = 0; + AddonDef.Version.Build = 0; + AddonDef.Version.Revision = 1; + AddonDef.Author = "Raidcore"; + AddonDef.Description = "Raises Nexus Events from ArcDPS combat API callbacks."; + AddonDef.Load = AddonLoad; + AddonDef.Unload = AddonUnload; + AddonDef.Flags = EAddonFlags_DisableHotloading; + + return &AddonDef; } void AddonLoad(AddonAPI* aApi) @@ -118,103 +115,25 @@ uintptr_t mod_combat_local(cbtevent* ev, ag* src, ag* dst, char* skillname, uint uintptr_t mod_combat(const char* channel, cbtevent* ev, ag* src, ag* dst, char* skillname, uint64_t id, uint64_t revision) { - /*Mutex.lock(); - if (evCombatEvents.size() > 1000) - { - for (size_t i = 0; i < 500; i++) - { - if (evCombatEvents[i]->src && evCombatEvents[i]->src->name) - { - delete[] evCombatEvents[i]->src->name; - } - if (evCombatEvents[i]->dst && evCombatEvents[i]->dst->name) - { - delete[] evCombatEvents[i]->dst->name; - } - if (evCombatEvents[i]->skillname) - { - delete[] evCombatEvents[i]->skillname; - } - if (evCombatEvents[i]->src) - { - delete evCombatEvents[i]->src; - } - if (evCombatEvents[i]->dst) - { - delete evCombatEvents[i]->dst; - } - delete evCombatEvents[i]; - } - - for (size_t i = 0; i < 500; i++) - { - evCombatEvents.erase(evCombatEvents.begin()); - } - } - Mutex.unlock();*/ - - EvCombatData* evCbtData = new EvCombatData(); - evCbtData->ev = ev != nullptr ? new cbtevent(*ev) : nullptr; - evCbtData->src = src != nullptr ? new ag(*src) : nullptr; - if (evCbtData->src && evCbtData->src->name) - { - size_t szSrcName = strlen(src->name) + 1; - if (szSrcName > 1) - { - char* sSrcName = new char[szSrcName]; - strcpy_s(sSrcName, szSrcName, src->name); - evCbtData->src->name = sSrcName; - } - else - { - evCbtData->src->name = nullptr; - } - } - evCbtData->dst = dst != nullptr ? new ag(*dst) : nullptr; - if (evCbtData->dst && evCbtData->dst->name) - { - size_t szDstName = strlen(dst->name) + 1; - if (szDstName > 1) - { - char* sDstName = new char[szDstName]; - strcpy_s(sDstName, szDstName, dst->name); - evCbtData->dst->name = sDstName; - } - else - { - evCbtData->dst->name = nullptr; - } - } - if (skillname) + EvCombatData evCbtData { - size_t szSkName = strlen(skillname) + 1; - if (szSkName > 1) - { - char* sSkName = new char[szSkName]; - strcpy_s(sSkName, szSkName, skillname); - evCbtData->skillname = sSkName; - } - else - { - evCbtData->skillname = nullptr; - } - } - evCbtData->id = id; - evCbtData->revision = revision; - - Mutex.lock(); - evCombatEvents.push_back(evCbtData); - Mutex.unlock(); + ev, + src, + dst, + skillname, + id, + revision + }; if (APIDefs != nullptr) { if (strcmp(channel, "local") == 0) { - APIDefs->RaiseEvent("EV_ARC_COMBATEVENT_LOCAL", evCbtData); + APIDefs->RaiseEvent("EV_ARCDPS_COMBATEVENT_LOCAL_RAW", &evCbtData); } else { - APIDefs->RaiseEvent("EV_ARC_COMBATEVENT_SQUAD", evCbtData); + APIDefs->RaiseEvent("EV_ARCDPS_COMBATEVENT_SQUAD_RAW", &evCbtData); } }