모드 배포하기

모드를 배포할 준비가 되었다고 생각되면, 제대로 작동하는지 확인하고 모드 저장소가 모드와 함께 작동할 수 있도록 필요한 정보를 설정하기 위해 몇 가지 추가 단계를 따라야 합니다.

로컬 테스트

모드를 배포하기 전에, 구현한 기능이 예상대로 작동하는지 확인해야 합니다.

예를 들어, 모드가 새로운 아이템, 제작법 또는 마일스톤을 추가하는 경우, 일반 플레이어의 입장에서 이를 해금하여 접근할 수 있는지 확인하십시오.

제작법의 경우, 제작법을 제작할 건물을 설정하고 실제로 작동하는지 확인하십시오. 예를 들어, 제작법이 아이템의 묶음 크기보다 더 많은 양을 요구하는 경우, 제작법이 유효해 보이더라도 기계는 작동할 수 없습니다.

모드에 구성 옵션이 있는 경우, 모드를 설치하는 모든 사용자가 기본 구성 옵션을 변경할 수 있다는 것을 인식하지 못할 수 있으므로, 지정한 기본 구성 옵션이 원하는 것인지 확인하십시오. 기본 구성 설정은 모드의 의도된 사용자 경험을 나타내야 합니다.

멀티플레이에서 클라이언트와 호스트 플레이어 모두에게 모드가 작동하는지 확인하십시오. 아이템, 도면, 제작법을 추가하는 모드의 경우 큰 문제가 되지 않지만, 추가 건물이나 다른 기능을 추가한 경우에는 문제가 될 수 있습니다.

모드를 테스트하는 방법에 대한 추가 정보는 테스트/멀티플레이 테스트 페이지에서 확인할 수 있습니다.

모드의 UPlugin 파일

모든 언리얼 엔진 플러그인은 <모드 참조>.uplugin 파일을 가져야 하며, 새티스팩토리 모드도 예외는 아닙니다. 이 파일은 JSON 형식으로 되어 있으며, 모드에 대한 정보(버전 번호, 의존성, 크레딧, 링크 등)를 포함합니다. 플러그인 디렉터리에는 하나의 uplugin 파일만 존재해야 하며, 그렇지 않으면 에디터가 혼란스러워할 수 있습니다.

이 파일은 모드를 알파킷으로 생성할 때 자동으로 생성되었어야 합니다.

튜토리얼의 그 시점에서, 나중에 다시 돌아오겠다고 했던 몇 가지 필드가 있으며, 이제 그때입니다.

이 파일은 모드의 플러그인 디렉터리에서 찾을 수 있지만, 일반적으로 언리얼 에디터 내에서 알파킷을 통해 편집하는 것이 좋습니다. 알파킷은 파일의 형식을 자동으로 처리해 주며, 잘못된 uplugin 파일을 생성하여 추적하기 번거로운 실수를 방지하는 데 도움을 줍니다.

알파킷 모드 목록에서 모드 옆의 편집 버튼을 클릭하여 알파킷 편집기를 엽니다.

왼쪽의 레이블 위에 마우스를 올리면 그 목적을 설명하는 툴팁이 표시됩니다.

플러그인 편집 스크린샷

아래에서 그들의 목적에 대해 더 자세히 설명하겠습니다. 지정하는 값에 대해 올바른 결정을 내리기 위해 아래의 모든 입력란의 정의를 읽는 것이 좋습니다.

원하시면 플러그인 문서 또는 C‍+‍+ 참조에서 사용할 수 있는 다양한 언리얼 설정에 대해 읽어보실 수 있지만, 이 페이지에서는 새티스팩토리 모드에서 가장 중요한 설정들을 다룰 것입니다.

입력란을 편집한 후, 변경 사항이 포함된 파일을 업로드할 수 있도록 모드를 다시 패키징하십시오.

기본 입력란

다음 입력란은 언리얼의 일반 uplugin 형식의 일부이며, 모딩 툴킷에 의해 추가 기능이 제공됩니다.

매개변수 기능 설명

Version

이 정수는 SemVersion 의 첫 번째 숫자와 일치해야 합니다(특수 필드 섹션에서 설명됨). 예를 들어, SemVersion이 1.0.0 인 모드는 버전을 1 로 입력해야 합니다.

VersionName

이 문자열은 SemVersion 과 정확히 일치해야 합니다(특수 필드 섹션에서 설명됨).

FriendlyName

이 문자열은 게임 내 로드된 모드 목록 및 구성 화면에 표시될 모드의 이름입니다.

Description

이 문자열은 게임 내 로드된 모드 목록 및 구성 화면에서 누군가가 모드를 볼 때 표시됩니다.

CreatedBy

이 문자열은 게임 내 로드된 모드 목록 및 구성 화면에서 누군가가 모드를 볼 때 작성자 이름 섹션에 표시됩니다.

DocsURL

여기 링크가 제공되면, 게임 내 로드된 모드 목록에서 클릭 시 URL을 열 수 있는 버튼이 표시됩니다. http:// / https:// 접두사는 선택 사항입니다.

SupportURL

여기 링크가 제공되면, 게임 내 로드된 모드 목록에서 클릭 시 URL을 열 수 있는 버튼이 표시됩니다. http:// / https:// 접두사는 선택 사항입니다.

특수 입력란

SML 및 SMR은 플러그인 설명 파일에 추가 입력란을 포함해야 합니다. 이 중 가장 중요한 것은 SemVersion, GameVersion 및 모드 의존성 목록입니다.

모드가 특별히 SML 없이 작동하도록 설계된 경우가 아니라면 SML이 아래 설명된 대로 플러그인 입력란에 나열되어 있는지 확인하십시오.

아래는 SML 및 SMR이 요구하는 모든 추가 입력란에 대한 설명입니다.

매개변수 기능 설명

SemVersion

모드의 버전 번호입니다. 새로운 배포와 함께 항상 증가해야 하며, semver 형식을 따라야 합니다. 요약하자면, 형식은 메이저.마이너.패치 입니다.

일반적으로, 1.0.0 은 모드의 첫 번째 공개 배포에 사용해야 합니다. 메이저 버전이 0인 버전 번호(예: 0.1.0)를 사용하면, 일반적으로 설명된 ^ 범위 지정자가 반직관적으로 작동하므로, 이를 피하는 것이 좋습니다.

  • 버그 수정을 배포할 때는 패치 버전을 증가시켜야 합니다(예: 1.0.1).

  • 다른 모드와의 상호작용 방식을 깨지 않는 변경 사항을 배포할 때는 마이너 버전을 증가시켜야 합니다(예: 1.1.0).

  • 다른 모드와의 상호작용 방식을 깨거나, 이전 버전과 호환되지 않는 변경 사항을 배포할 때는 메이저 버전을 증가시켜야 합니다(예: 2.0.0).

모드의 프리릴리스 버전을 배포하고 싶다면, 확장된 메이저.마이너.패치-프리릴리스문자열 형식을 사용하십시오. 프리릴리스문자열pre.1 또는 beta.12와 같은 영숫자 및 점 문자열입니다. 모드 관리자는 프리릴리스 접미사가 붙은 버전은 자동으로 다운로드하지 않습니다. 이는 사용자가 버전 선택기를 사용하여 수동으로 선택해야 한다는 뜻입니다.


1.10.0 은 유효한 semver 버전이며, 1.9.0 이후 반드시 2.0.0 이 와야 하는 것은 아닙니다.

이 입력란은 필수이며, VersionName 란과 정확히 일치해야 합니다. 잘못된 값이 지정되면 에디터는 모드를 패키징하는 것을 막을 것입니다.

GameVersion

이 모드가 개발/테스트된 게임 빌드 버전 번호에 대한 버전 범위 지정자입니다. 미래의 게임 빌드 번호가 무엇인지 모르기 때문에, 현재로서는 최소 범위(예: >=뭐시기)만 유용합니다. 예를 들어, `>=273254`는 패치 0.8.3.3 및 그 이후의 모든 빌드를 허용합니다.

알파킷은 이 입력란이 오래된 경우 경고를 생성하며, 경고를 클릭하면 업데이트됩니다.

SML은 런타임에서 이 란을 확인하며, 게임 버전이 이 범위와 일치하지 않으면 게임이 시작되지 않습니다.

Plugins

일반 uplugin 플러그인 배열에 추가 기능이 추가되었습니다. 여기에서 다른 모드 참조(또는 언리얼 플러그인)를 나열할 수 있으며, SMM은 모드를 설치할 때 다운로드해야 함을 알고 있습니다. 모드 참조로 플러그인을 추가하면, 나열된 모드가 모드의 의존성이 됩니다.

SML과 분리된 모드를 생성하지 않는 한 SML 플러그인은 기본적으로 항상 여기에 나열되어야 하며, 모드가 지원하는 SML 버전을 지정할 수 있습니다. 각 플러그인은 다음 속성을 가진 객체로 나열되어야 합니다.

매개변수 기능 설명

Name

의존성으로 나열하려는 플러그인의 모드 참조입니다.

이 입력란은 필수입니다.

SemVersion

이 의존 모드에 대한 버전 범위 지정자입니다. semver 형식을 따라야 합니다. 버전 번호 앞에 비교 연산자를 붙여 범위의 버전을 허용할 수 있습니다.

저희는 일반적으로 패치 자리(1.2.3의 3)과 마이너 버전 자리(1.2.3의 2)에서 어떤 숫자도 허용하는 ^ 접두사를 사용하는 것을 권장드립니다. 그러나, 주 버전(1.2.3의 1)이 0 일 때는 다르게 작동하므로, 이것을 피하기 위해 주 버전이 최소한 1 이 되도록 해야 합니다.

>= 접두사는 나열된 버전 이상(및 포함)의 모든 semversion을 허용합니다. 매우 구체적인 이유가 없다면, 대신 ^ 접두사를 사용하는 것이 좋습니다.

이 입력란은 필수입니다.

Optional

이 의존성이 필요하지 않은 경우 true 로 설정할 수 있는 부울 속성입니다. 그러나 존재하는 경우, 우리의 모드는 이를 기반으로 더 많은 기능을 해금할 수 있습니다.

이 입력란은 선택 사항이며, 지정하지 않으면 기본값은 false 입니다.

BasePlugin

이 부울 속성은 모드 의존성이 아닌 모든 플러그인 의존성에 대해 true 로 설정해야 합니다. 예를 들어, 모드가 필요로 하는 일반 언리얼 엔진 플러그인입니다. SMM은 이러한 플러그인을 다운로드하려고 시도하지 않습니다.

이 입력란은 선택 사항이며, 지정하지 않으면 기본값은 false 입니다.

Enabled

이 입력란은 SML에 의해 추가 기능이 제공되진 않지만, 여기에서 추가적인 주의를 끌기 위해 나열되었습니다. 이 입력란은 모든 플러그인 항목에서 true 로 설정해야 합니다.

이 입력란은 필수이며, 생략할 경우 새티스팩토리가 시작되지 않으며, 오류 메시지에서 문제의 uplugin 파일을 인용합니다.

RemoteVersionRange

멀티플레이에서 원격 측에서 수락되는 버전의 Semver 범위입니다. 이 입력란은 원격 측에서 특정 버전의 모드가 설치되어 있어야 참여할 수 있도록 합니다. 이 입력란의 형식은 위의 플러그인 SemVersion 항목을 참고하십시오.

이 입력란은 선택 사항이며, 지정하지 않으면 기본값은 SemVersion 이므로, 양측 모두 동일한 모드 버전이 설치되어 있어야 합니다. 이 동작을 사용하지 않는 경우, 이 입력란을 제외해야 합니다.

RequiredOnRemote

멀티플레이에서 모드가 양측에 있어야 하는지 제어합니다. 클라이언트가 연결할 때, 호스트는 자신의 모드 목록을 클라이언트의 목록과 비교합니다. 호스트의 모드에 RequiredOnRemote 가 true로 설정되어 있으면, RemoteVersionRange 가 클라이언트의 보고된 버전을 확인하는 데 사용됩니다. SML 3.9.0부터 클라이언트가 호스트를 확인하는 방식도 구현되었습니다.

이 입력란은 선택 사항이며, 기본값은 true 입니다. 이 동작을 사용하지 않는 경우, 이 입력란을 제외해야 합니다.

중요한 C‍+‍+ 입력란

모드에 C‍+‍+ 코드가 있는 경우, 모듈 플러그인 설명 섹션에 UBT 모듈을 나열해야 합니다. 아래의 예시가 이를 보여줍니다.

예시

여기 JSON 형식의 몇 가지 예시 .uplugin 이 제시됩니다.

블루프린트 전용 모드의 .uplugin 예:

{
	"FileVersion": 3,
	"Version": 6,
	"SemVersion": "6.2.1",
	"VersionName": "6.2.1",
	"FriendlyName": "예시 블루프린트 전용 모드",
	"Description": "블루프린트 콘텐츠만 포함된 모드의 .uplugin 예시",
	"Category": "모딩",
	"CreatedBy": "새티스팩토리 모딩 팀",
	"CreatedByURL": "https://github.com/satisfactorymodding/SatisfactoryModLoader",
	"DocsURL": "https://docs.ficsit.app",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": true,
	"IsBetaVersion": false,
	"IsExperimentalVersion": false,
	"Installed": false,
	"LocalizationTargets": [
		{
			"Name": "ExampleMod",
			"LoadingPolicy": "Always"
		}
	],
	"Plugins": [
		{
			"Name": "SML",
			"Enabled": true,
			"SemVersion": "^3.9.0"
		}
	],
	"GameVersion": ">=365306"
}

C‍+‍+ 및 블루프린트 모드의 .uplugin 예:

{
	"FileVersion": 3,
	"Version": 6,
	"VersionName": "6.2.1",
	"SemVersion": "6.2.1",
	"FriendlyName": "예시 하이브리드 모드",
	"Description": "블루프린트 콘텐츠와 C++ 모듈을 모두 포함하는 모드의 .uplugin 예시",
	"Category": "모딩",
	"CreatedBy": "새티스팩토리 모딩 팀",
	"CreatedByURL": "https://ficsit.app/",
	"DocsURL": "https://docs.ficsit.app/",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": true,
	"IsBetaVersion": false,
	"IsExperimentalVersion": false,
	"Installed": false,
	"Modules": [
		{
			"Name": "ExampleHybridMod",
			"Type": "Runtime",
			"LoadingPhase": "PostDefault"
		}
	],
	"Plugins": [
		{
			"Name": "SML",
			"SemVersion": "^3.9.0",
			"Enabled": true
		},
		{
			"Name": "DependencyMod",
			"SemVersion": "^1.3.0",
			"Enabled": true
		}
	],
	"GameVersion": ">=365306"
}

SMR UPlugin 검증기

uplugin 파일의 형식을 확인하고 싶다면, SMR은 도움 페이지에서 검증기를 제공합니다. uplugin 파일을 오른쪽 상자에 붙여넣으면, 아래 상자에 오류 메시지가 표시됩니다.

검증기가 완벽하지는 않지만, 업로드 중 발생할 수 있는 많은 오류를 해결하는 데 도움이 될 수 있습니다. 검증에 실패하면, 누락된 쉼표나 일치하지 않는 중괄호 및 대괄호와 같은 문제를 주의 깊게 살펴보십시오.

형식 문제를 피하려면 에디터에서 알파킷 위젯을 사용하는 것이 좋습니다!

이 단계에서 막히면 디스코드에서 문의해 보십시오.

배포 패키지 만들기

모드를 배포할 준비가 되면, 업로드를 위해 모드를 패키징해야 합니다. 지금까지 무시했던 "알파킷 배포" 탭을 사용할 시간입니다. 알파카 로켓 버튼을 클릭하거나 파일 > 알파킷 배포 를 클릭하여 엽니다.

배포 대상 설명

여러 가지 다른 버전의 새티스팩토리를 다운로드할 수 있다는 것을 알고 계실 것입니다.

안정적(주요 분기) 버전과 실험적(EXP, 초기 기능 테스트) 분기 간의 구분은 상대적으로 잘 알려져 있습니다. 그러나 각 플랫폼(대상)에 대한 게임의 약간 다른 빌드도 있습니다. 각각의 안정적 및 실험적 변형이 있습니다:

  • Windows - 새티스팩토리의 클라이언트 버전이며, 게임을 플레이하기 위해 실행하는 버전입니다. 리눅스에서 게임을 하는 사람들은 여전히 이 버전을 사용하며, 호환성/에뮬레이션 레이어를 통해 실행합니다.

  • Windows Server - 새티스팩토리의 Windows 전용 서버 버전입니다. 시각적 인터페이스가 없으며, Windows에서 서버를 실행하는 데 사용되며, 다소 드뭅니다.

  • Linux Server - 새티스팩토리의 Linux 전용 서버 버전입니다. 이는 대부분의 전용 서버가 실행하는 버전이며, 특히 제3자 서비스에서 호스팅됩니다.

스팀과 에픽을 위한 Windows 클라이언트의 약간 다른 버전도 있습니다. 각 플랫폼에서 사용 가능하도록 모드를 컴파일하려면 약간 다른 방식으로 컴파일해야 하며, 특히 Linux 서버와 호환되도록 해야 합니다.

다행히도, 알파킷은 모든 3개의 대상 플랫폼과 2개의 런처 변형에 대해 모드를 컴파일하는 작업을 처리합니다!

로컬에서 싱글 플레이로 모드를 테스트하는 동안, 사용하지 않는 다른 플랫폼을 위해 코드를 컴파일하고 패키징하는 것은 시간 낭비입니다. 그래서 '선택 알파킷(개발)' 및 개발 '알파킷!' (이 모드만) 버튼은 테스트 중에 관심 있는 대상만 컴파일하며, "게임 경로 복사" 값에서 감지할 수 있을 때만 에픽/스팀 클라이언트의 변형을 컴파일합니다.

배포 대상 구성

모드를 배포하기 전에, 배포 대상 체크박스를 사용하여 모드가 호환되는 대상을 정의해야 합니다. 이 대상 중 하나를 생략하면, 모드는 해당 플랫폼에서 작동하지 않습니다!

대부분의 경우, 특히 사용자 정의 C‍+‍+ 코드가 없는 모드의 경우, 모든 3개의 배포 대상 체크박스를 선택해야 합니다. 이렇게 하면 모드가 게임 클라이언트와 전용 서버에서 실행됩니다.

모드 파일 내보내기 작동 방식

지금까지는 알파킷 개발의 '모드 디렉터리로 복사' 기능을 사용하여 테스트를 위해 게임의 폴더에 모드 파일을 배치했을 것입니다.

별개로, '선택 알파킷(개발)' 또는 '알파킷!' (이 모드만) 버튼을 사용하면 <시작 프로젝트 폴더>/Saved/ArchivedPlugins/모드참조/모드참조-대상플랫폼이름.zip 에 위치한 보관 zip 파일이 생성됩니다. 이 폴더는 시작 프로젝트의 Saved 폴더에 있으며, 모드의 Saved 폴더가 아닙니다.

알파킷 배포

'선택 알파킷(배포)' 및 배포 '알파킷!' (이 모드만) 버튼은 모드를 모든 대상에 대해 하나의 다중 대상 zip 파일로 컴파일하고 패키징합니다. 아래의 예시 이미지에서, ExampleMod에 대해 알파킷! 을 클릭하면 모든 3개의 대상에 대해 빌드됩니다.

Example Mod 및 SML이 선택된 Alpakit 배포

모드 옆의 '알파킷!'(이 모드만) 버튼을 누르고 완료될 때까지 기다리십시오. 프로젝트의 C‍+‍+ 코드가 이전에 건너뛴 대상을 위해 컴파일되기 때문에 배포를 위한 패키징에는 상당한 시간이 소요될 수 있지만, 이후 실행은 더 빠를 겁니다.

모드를 알파킷 배포를 통해 패키징을 최초로 완료하면, 그 열에 새 폴더 버튼이 나타날 것입니다. 버튼을 클릭하면 해당 모드의 zip 파일이 포함된 앞서 언급한 보관된 플러그인 폴더로 이동하여 쉽게 검사하고 업로드할 수 있습니다.

배포 과정은 모든 빌드 대상을 포함한 모드참조.zip 압축 파일을 생성할 것입니다. 이 파일은 나중에 모드 저장소에 업로드할 파일입니다.

zip 파일의 내용을 확인하여 예상한 대로인지 확인하십시오. 어떤 이유로든 모드에 추가 파일이 패키징되어야 하는 경우, 알파킷이이 빌드할 때 이를 포함하도록 지시하는 방법은 여기에서 확인하십시오.

모드 참조를 변경할 마지막 기회

앞서 언급한 모드 참조 섹션에 따르면, 모드를 배포하면 더 이상 모드 참조를 변경할 수 없습니다.

변경하기로 결정하면, 여러 파일을 수정해야 하며, 그 중 대부분은 해당 페이지에 설명되어 있습니다.

새티스팩토리 모드 저장소에 업로드

모드 페이지 및 배포를 생성하려면 SMR에 업로드 페이지의 지침을 따르십시오.