diff --git a/.github/workflows/automatic-release.yml b/.github/workflows/automatic-release.yml new file mode 100644 index 0000000..faa22be --- /dev/null +++ b/.github/workflows/automatic-release.yml @@ -0,0 +1,112 @@ +name: ๐Ÿš€ Automatic Release + +on: + pull_request: + branches: + - main + types: [closed] + +env: + SUPPORTED_SERVER_VERSIONS: "1.4-b8 1.3-b9" # space-delimited + SUBFOLDER: ${{ github.event.repository.name }} + PROJECT_FOLDER: src + +jobs: + release: + if: ${{ github.event.pull_request.merged }} + runs-on: ubuntu-22.04 + permissions: + contents: write + steps: + - name: ๐Ÿšš Checkout repository + uses: actions/checkout@v4 + + - name: ๐Ÿ” Inspect contents + run: | + version=$(sed -n '/Version/{s/.*.*/\1/;p}' ModInfo.xml) + if gh release view "$version" > /dev/null 2>&1; then + echo "Release $version already exists; please update ModInfo.xml and create another pull request" + exit 1 + fi + echo "MOD_VERSION=$version" >> $GITHUB_ENV + + prerelease=$([[ $version = 0* ]] && echo "true" || echo "false") + echo "PRERELEASE=$prerelease" >> $GITHUB_ENV + + csproj_path=$(sed -n 's/.*"[^"]*\\\([^"]*\.csproj\)".*/\1/p' ${{ github.event.repository.name }}.sln) + echo "CSPROJ_NAME=$csproj_path" >> $GITHUB_ENV + + dll_name=$(sed -n '/AssemblyName/{s/.*\(.*\)<\/AssemblyName>.*/\1/;p}' ${{ env.PROJECT_FOLDER }}/$csproj_path) + echo "DLL_NAME=$dll_name" >> $GITHUB_ENV + + - name: ๐Ÿš› Checkout 7dtd-references + uses: actions/checkout@v4 + with: + repository: "${{ github.repository_owner }}/7dtd-references" + token: "${{ secrets.REFERENCES_TOKEN }}" + path: "7dtd-references" + + - name: ๐Ÿง Install mono + run: | + sudo apt-get update + sudo apt-get install -y mono-complete + + - name: ๐Ÿ›ป Restore NuGet packages + run: | + nuget restore ${{ github.event.repository.name }}.sln + + - name: ๐Ÿ“ฆ Build and package artifacts + run: | + cp ${{ env.PROJECT_FOLDER }}/ModApi.cs ${{ env.PROJECT_FOLDER }}/ModApi.cs.bak + for GAME_VERSION in ${{ env.SUPPORTED_SERVER_VERSIONS }}; do + echo "building and packing mod for 7DTD version $GAME_VERSION" + + # update release and target versions + cp ${{ env.PROJECT_FOLDER }}/ModApi.cs.bak ${{ env.PROJECT_FOLDER }}/ModApi.cs + sed -i "s|DLL_VERSION = \"test-version\"|DLL_VERSION = \"${{ env.MOD_VERSION }}\"|g" ${{ env.PROJECT_FOLDER }}/ModApi.cs + sed -i "s|BUILD_TARGET = \"test-target\"|BUILD_TARGET = \"$GAME_VERSION\"|g" ${{ env.PROJECT_FOLDER }}/ModApi.cs + + # TODO: update assembly info + + + # update reference paths + sed -i "s|..\\\\..\\\\..\\\\..\\\\..\\\\..\\\\Program Files (x86)\\\\Steam\\\\steamapps\\\\common\\\\7 Days to Die Dedicated Server|..\\\\7dtd-references\\\\${GAME_VERSION}|g" ${{ env.PROJECT_FOLDER }}/${{ env.CSPROJ_NAME }} + + # uncomment if troubleshooting becomes necessary + # echo "${{ env.PROJECT_FOLDER }}/${{ env.CSPROJ_NAME }} references were modified to the following:" + # cat "${{ env.PROJECT_FOLDER }}/${{ env.CSPROJ_NAME }}" + + msbuild ${{ github.event.repository.name }}.sln /p:Configuration=Release + if [ $? -ne 0 ]; then + echo "build for $GAME_VERSION failed and will be skipped" + continue + else + echo "build for $GAME_VERSION was successful" + fi + + mkdir "${{ env.SUBFOLDER }}" + cp -r Config "${{ env.SUBFOLDER }}/" + cp ModInfo.xml "${{ env.SUBFOLDER }}/" + cp README.md "${{ env.SUBFOLDER }}/" + cp CHANGELOG.md "${{ env.SUBFOLDER }}/" + cp "${{ env.DLL_NAME }}.dll" "${{ env.SUBFOLDER }}/" + zip -r "${{ github.event.repository.name }}-${{ env.MOD_VERSION }}-7dtd-$GAME_VERSION.zip" "${{ env.SUBFOLDER }}" + rm -rf "${{ env.SUBFOLDER }}" + done + if ! ls *.zip > /dev/null 2>&1; then + echo "could not successfully build for any of the supported versions of 7 days to die" + exit 1 + fi + + - name: ๐Ÿ“ฐ Post new release + uses: ncipollo/release-action@v1 + with: + tag: ${{ env.MOD_VERSION }} + commit: main + name: ${{ github.event.pull_request.title }} + body: ${{ github.event.pull_request.body }} + generateReleaseNotes: true + artifacts: "*.zip" + prerelease: ${{ env.PRERELEASE }} + # if you'd like to review the generated release before publishing it, enable draft mode + # draft: true diff --git a/.github/workflows/pack-and-attach-artifact.yml b/.github/workflows/pack-and-attach-artifact.yml new file mode 100644 index 0000000..a54e055 --- /dev/null +++ b/.github/workflows/pack-and-attach-artifact.yml @@ -0,0 +1,112 @@ +name: ๐Ÿ“ฆ Pack and Attach Artifact + +on: + workflow_dispatch: + inputs: + release_tag: + description: 'Tag of the existing release' + required: true + type: string + server_version: + description: '7DTD Server Version' + required: true + default: '1.4-b8' + type: choice + options: + - '1.4-b8' + - '1.3-b9' + +permissions: + contents: write + + +# NOTE: in `run` steps, all 3 of these options are valid ways to reference these env vars: +# ${{ env.MOD_VERSION }} +# ${MOD_VERSION} +# $MOD_VERSION +env: + PROJECT_FOLDER: src + MOD_VERSION: ${{ github.event.inputs.release_tag }} + GAME_VERSION: "${{ github.event.inputs.server_version }}" + ARCHIVE_NAME: ${{ github.event.repository.name }}-${{ github.event.inputs.release_tag }}-7dtd-${{ github.event.inputs.server_version }} + SUBFOLDER: ${{ github.event.repository.name }} + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - name: ๐Ÿšš Checkout repository + uses: actions/checkout@v4 + with: + ref: "${{ env.MOD_VERSION }}" + + - name: ๐Ÿ” Inspect contents + run: | + gh release view "${{ env.MOD_VERSION }}" || { echo "Release named '${{ env.MOD_VERSION }}' not found; please target a tag with an existing Release."; exit 1; } + + csproj_path=$(sed -n 's/.*"[^"]*\\\([^"]*\.csproj\)".*/\1/p' ${{ github.event.repository.name }}.sln) + echo "CSPROJ_NAME=$csproj_path" >> $GITHUB_ENV + + dll_name=$(sed -n '/AssemblyName/{s/.*\(.*\)<\/AssemblyName>.*/\1/;p}' ${{ env.PROJECT_FOLDER }}/$csproj_path) + echo "DLL_NAME=$dll_name" >> $GITHUB_ENV + env: + GH_TOKEN: ${{ github.token }} + + - name: ๐Ÿš› Checkout 7dtd-references + uses: actions/checkout@v4 + with: + repository: "${{ github.repository_owner }}/7dtd-references" + token: "${{ secrets.REFERENCES_TOKEN }}" + path: "7dtd-references" + + - name: ๐Ÿ“ Update ModInfo.xml version and project references + run: | + # update ModInfo version to match tag (in case updating it in source was forgotten) + sed -i "s|||" ModInfo.xml + + # update release and target versions + sed -i "s|DLL_VERSION = \"test-version\"|DLL_VERSION = \"${{ env.MOD_VERSION }}\"|g" ${{ env.PROJECT_FOLDER }}/ModApi.cs + sed -i "s|BUILD_TARGET = \"test-target\"|BUILD_TARGET = \"$GAME_VERSION\"|g" ${{ env.PROJECT_FOLDER }}/ModApi.cs + + # TODO: update assembly info + + + # update reference paths + sed -i "s|..\\\\..\\\\..\\\\..\\\\..\\\\..\\\\Program Files (x86)\\\\Steam\\\\steamapps\\\\common\\\\7 Days to Die Dedicated Server|..\\\\7dtd-references\\\\${GAME_VERSION}|g" ${{ env.PROJECT_FOLDER }}/${{ env.CSPROJ_NAME }} + + echo "${{ env.PROJECT_FOLDER }}/${{ env.CSPROJ_NAME }} references were modified to the following:" + cat "${{ env.PROJECT_FOLDER }}/${{ env.CSPROJ_NAME }}" + + - name: ๐Ÿง Install mono + run: | + sudo apt-get update + sudo apt-get install -y mono-complete + + - name: ๐Ÿ›ป Restore NuGet packages + run: | + nuget restore ${{ github.event.repository.name }}.sln + + - name: ๐Ÿ“ฆ Build and package artifact + run: | + msbuild ${{ github.event.repository.name }}.sln /p:Configuration=Release + mkdir "${{ env.SUBFOLDER }}" + cp -r Config "${{ env.SUBFOLDER }}/" + cp ModInfo.xml "${{ env.SUBFOLDER }}/" + cp README.md "${{ env.SUBFOLDER }}/" + cp CHANGELOG.md "${{ env.SUBFOLDER }}/" + cp "${{ env.DLL_NAME }}.dll" "${{ env.SUBFOLDER }}/" + zip -r "${{ env.ARCHIVE_NAME }}.zip" "${{ env.SUBFOLDER }}" + ls -alr + + - name: โฌ†๏ธ Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARCHIVE_NAME }} + path: ${{ env.ARCHIVE_NAME }}.zip + + - name: ๐Ÿ“‹ Attach artifact + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ env.MOD_VERSION }} + files: ${{ env.ARCHIVE_NAME }}.zip diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 422dadf..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: ๐Ÿ“ฆ Automated Release - -on: - pull_request: - branches: - - main - types: [closed] - -jobs: - release: - if: ${{ github.event.pull_request.merged }} - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: ๐Ÿšš Get latest code - uses: actions/checkout@v2 - - name: ๐Ÿ“ฆ Package data - run: | - # Edit this line if you want to include additional files - # q stands for quiet, r stands for recursive (to include all files and sub-folders in Config) - zip -qr "${{ github.event.repository.name }}.zip" *.dll Config ModInfo.xml README.md CHANGELOG.md LICENSE - - version=$(sed -n '/Version/{s/.*.*/\1/;p}' ModInfo.xml) - echo "version=$version" >> $GITHUB_ENV - prerelease=$([[ $version = 0* ]] && echo "true" || echo "false") - echo "prerelease=$prerelease" >> $GITHUB_ENV - # echoes for troubleshooting in case you need them - # echo "name: ${{ github.event.repository.name }}" - # echo "title: ${{ github.event.pull_request.title }}" - # echo "version: $version" - # echo "prerelease: $prerelease" - - name: ๐Ÿ“ข Post Release - uses: ncipollo/release-action@v1 - with: - tag: ${{ env.version }} - commit: main - name: ${{ github.event.pull_request.title }} - body: ${{ github.event.pull_request.body }} - generateReleaseNotes: true - artifacts: "${{ github.event.repository.name }}.zip" - prerelease: ${{ env.prerelease }} - # if you'd like to review the generated release before publishing it, enable draft mode - # draft: true diff --git a/.gitignore b/.gitignore index f64f9b6..d14820c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ +*.dll -# Created by https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,csharp,git -# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,visualstudiocode,csharp,git +# Created by https://www.toptal.com/developers/gitignore/api/windows,macos,linux,visualstudio,visualstudiocode,git,csharp +# Edit at https://www.toptal.com/developers/gitignore?templates=windows,macos,linux,visualstudio,visualstudiocode,git,csharp ### Csharp ### ## Ignore Visual Studio temporary files, build results, and @@ -415,6 +416,53 @@ FodyWeavers.xsd *_LOCAL_*.txt *_REMOTE_*.txt +### Linux ### + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + ### VisualStudioCode ### !.vscode/*.code-snippets @@ -428,10 +476,26 @@ FodyWeavers.xsd .history .ionide -# Support for Project snippet scope -.vscode/*.code-snippets +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files -# Ignore code-workspaces +# Windows shortcuts +*.lnk ### VisualStudio ### @@ -614,4 +678,4 @@ FodyWeavers.xsd ### VisualStudio Patch ### # Additional files built by Visual Studio -# End of https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,csharp,git \ No newline at end of file +# End of https://www.toptal.com/developers/gitignore/api/windows,macos,linux,visualstudio,visualstudiocode,git,csharp \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dfad6d..05e1766 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [5.0.1] - 2025-04-11 + +- rebuilt mod for 7dtd 1.4 (b8) +- update pipeline to build multiple versions + ## [5.0.0] - 2025-02-15 - update references for 7dtd-1.3-b9 diff --git a/ModInfo.xml b/ModInfo.xml index 43ba7c2..46cb311 100644 --- a/ModInfo.xml +++ b/ModInfo.xml @@ -4,7 +4,7 @@ - + diff --git a/QuantumElevators.dll b/QuantumElevators.dll deleted file mode 100644 index 3c8a6c4..0000000 Binary files a/QuantumElevators.dll and /dev/null differ diff --git a/README.md b/README.md index 3b9f07b..aa8dab8 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ # Quantum Elevators -[![๐Ÿงช Tested with 7DTD 1.3 (b9)](https://img.shields.io/badge/๐Ÿงช%20Tested%20with-7DTD%201.3%20(b9)-blue.svg)](https://7daystodie.com/) +[![๐Ÿš€ Automatic Release](https://github.com/jonathan-robertson/quantum-elevators/actions/workflows/automatic-release.yml/badge.svg)](https://github.com/jonathan-robertson/quantum-elevators/actions/workflows/automatic-release.yml) [![โœ… Dedicated Servers Supported ServerSide](https://img.shields.io/badge/โœ…%20Dedicated%20Servers-Supported%20Serverside-blue.svg)](https://7daystodie.com/) [![โœ… Single Player and P2P Supported](https://img.shields.io/badge/โœ…%20Single%20Player%20and%20P2P-Supported-blue.svg)](https://7daystodie.com/) -[![๐Ÿ“ฆ Automated Release](https://github.com/jonathan-robertson/quantum-elevators/actions/workflows/release.yml/badge.svg)](https://github.com/jonathan-robertson/quantum-elevators/actions/workflows/release.yml) ![quantum-elevators social image](https://raw.githubusercontent.com/jonathan-robertson/quantum-elevators/media/quantum-elevators-logo-social.jpg) diff --git a/copy-on-build.cmd b/copy-on-build.cmd deleted file mode 100644 index fb60f7c..0000000 --- a/copy-on-build.cmd +++ /dev/null @@ -1,29 +0,0 @@ -@REM Copy build files to destination based on build environment -@REM Expecting the following to be added to Project Settings -> Build Events: -@REM SET ConfigurationName=$(ConfigurationName) -@REM SET SolutionName=$(SolutionName) -@REM call copy-on-build.cmd - -echo Starting Script: copy-on-build.cmd -echo ConfigurationName: %ConfigurationName% -echo SolutionName: %SolutionName% - -if "%ConfigurationName%" == "Debug" ( - echo Debug Build - if "" == "%SDTD_MODS_DEBUG_FOLDER%" ( - echo environment variable 'SDTD_MODS_DEBUG_FOLDER' is not set; please configure this in User Environment Variables and restart Visual Studio. - exit 0 - ) - robocopy . %SDTD_MODS_DEBUG_FOLDER%\%SolutionName% ModInfo.xml *.md *.dll *.pbd /dcopy:dat - robocopy .\Config %SDTD_MODS_DEBUG_FOLDER%\%SolutionName%\Config /s /dcopy:dat /PURGE - exit 0 -) else if "%ConfigurationName%" == "Release" ( - echo Release Build - if "" == "%SDTD_MODS_RELEASE_FOLDER%" ( - echo environment variable 'SDTD_MODS_RELEASE_FOLDER' is not set; please configure this in User Environment Variables and restart Visual Studio. - exit 0 - ) - robocopy . %SDTD_MODS_RELEASE_FOLDER%\%SolutionName% ModInfo.xml *.md *.dll /dcopy:dat - robocopy .\Config %SDTD_MODS_RELEASE_FOLDER%\%SolutionName%\Config /s /dcopy:dat /PURGE - exit 0 -) diff --git a/references/0Harmony.dll b/references/0Harmony.dll deleted file mode 100644 index 6b3a911..0000000 Binary files a/references/0Harmony.dll and /dev/null differ diff --git a/references/Assembly-CSharp.dll b/references/Assembly-CSharp.dll deleted file mode 100644 index 38b0599..0000000 Binary files a/references/Assembly-CSharp.dll and /dev/null differ diff --git a/references/LogLibrary.dll b/references/LogLibrary.dll deleted file mode 100644 index 95bb92f..0000000 Binary files a/references/LogLibrary.dll and /dev/null differ diff --git a/references/System.Configuration.dll b/references/System.Configuration.dll deleted file mode 100644 index c5a3aa5..0000000 Binary files a/references/System.Configuration.dll and /dev/null differ diff --git a/references/UnityEngine.CoreModule.dll b/references/UnityEngine.CoreModule.dll deleted file mode 100644 index 653e932..0000000 Binary files a/references/UnityEngine.CoreModule.dll and /dev/null differ diff --git a/references/UnityEngine.dll b/references/UnityEngine.dll deleted file mode 100644 index 1f412e8..0000000 Binary files a/references/UnityEngine.dll and /dev/null differ diff --git a/src/CoreLogic.cs b/src/CoreLogic.cs index 673d368..b85c683 100644 --- a/src/CoreLogic.cs +++ b/src/CoreLogic.cs @@ -46,9 +46,10 @@ internal static void Warp(Direction direction, EntityPlayer player, Vector3i sou _ = player.Buffs.AddBuff(BuffCooldownName); var userIdentifier = GameManager.Instance.persistentPlayers.GetPlayerDataFromEntityID(player.entityId).PrimaryId; + Vector3i destination = default; // note: do not inline this; mono/msbuild in linux pipeline returns error if we do: error CS0165: Use of unassigned local variable 'destination' if (CanAccess(player, userIdentifier, sourceBlockPos, sourceBlockValue, out var sourceTileEntity) && (direction == Direction.Up - ? !player.Buffs.HasBuff(BuffAtTopFloorName) && TryGetFloorAbove(userIdentifier, sourceBlockPos, sourceBlockValue, sourceTileEntity, out var destination) + ? !player.Buffs.HasBuff(BuffAtTopFloorName) && TryGetFloorAbove(userIdentifier, sourceBlockPos, sourceBlockValue, sourceTileEntity, out destination) : !player.Buffs.HasBuff(BuffAtBottomFloorName) && TryGetFloorBelow(userIdentifier, sourceBlockPos, sourceTileEntity, out destination))) { // clear above/below locks early diff --git a/src/ModAPI.cs b/src/ModApi.cs similarity index 89% rename from src/ModAPI.cs rename to src/ModApi.cs index 3561ed7..f82fc21 100644 --- a/src/ModAPI.cs +++ b/src/ModApi.cs @@ -26,12 +26,14 @@ public void InitMod(Mod _modInstance) ModEvents.GameStartDone.RegisterHandler(OnGameStartDone); } - private const string DLL_VERSION = "5.0.0"; // TODO: always update this before each release + private const string DLL_VERSION = "test-version"; // note: this is automatically updated to a version like 5.1.0 + private const string BUILD_TARGET = "test-target"; // note: this is automatically updated to a build version like 1.3 + private void OnGameAwake() { try { - _log.Info($"Quantum Elevators DLL Version: {DLL_VERSION}"); + _log.Info($"Quantum Elevators DLL Version {DLL_VERSION} build for 7DTD {BUILD_TARGET}"); } catch (Exception e) { diff --git a/src/QuantumElevators.csproj b/src/QuantumElevators.csproj index 943fe64..4be6aed 100644 --- a/src/QuantumElevators.csproj +++ b/src/QuantumElevators.csproj @@ -33,15 +33,15 @@ - ..\references\0Harmony.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\7 Days to Die Dedicated Server\Mods\0_TFP_Harmony\0Harmony.dll False - ..\references\Assembly-CSharp.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\7 Days to Die Dedicated Server\7DaysToDieServer_Data\Managed\Assembly-CSharp.dll False - ..\references\LogLibrary.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\7 Days to Die Dedicated Server\7DaysToDieServer_Data\Managed\LogLibrary.dll False @@ -54,11 +54,11 @@ - ..\references\UnityEngine.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\7 Days to Die Dedicated Server\7DaysToDieServer_Data\Managed\UnityEngine.dll False - ..\references\UnityEngine.CoreModule.dll + ..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\7 Days to Die Dedicated Server\7DaysToDieServer_Data\Managed\UnityEngine.CoreModule.dll False @@ -73,8 +73,7 @@ - SET ConfigurationName=$(ConfigurationName) -SET SolutionName=$(SolutionName) -call copy-on-build.cmd + + \ No newline at end of file diff --git a/update-references.sh b/update-references.sh deleted file mode 100644 index 4ddfb4d..0000000 --- a/update-references.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -references_folder=./references -harmony_filename="0Harmony.dll" -harmony_folder="/c/Program Files (x86)/Steam/steamapps/common/7 Days to Die Dedicated Server/Mods/0_TFP_Harmony" -managed_folder="/c/Program Files (x86)/Steam/steamapps/common/7 Days to Die Dedicated Server/7DaysToDieServer_Data/Managed" - -cd $references_folder -for file in *; do - if [ -f "$file" ]; then - if [ "$file" = "$harmony_filename" ]; then - cp "$harmony_folder/$file" ./ - else - cp "$managed_folder/$file" ./ - fi - fi -done \ No newline at end of file