Cách tạo bản mod Factorio: Thêm vật phẩm, công thức và tên bằng Lua
Trong Factorio 2.0, chúng ta sẽ thêm một vật phẩm luyện tập tm-practice-plate được làm từ hai tấm sắt. Đây là một ví dụ về việc trực tiếp tạo bản mẫu vật phẩm (prototype), công thức chế tạo và ngôn ngữ (locale) để đọc vào thư mục mod. Nó dựa trên bản mod gốc không phụ thuộc vào tài sản Space Age và sử dụng một bản đồ kiểm tra riêng biệt thay vì bản lưu nhà máy hiện có.
1. Chuẩn bị thư mục và tệp mod
Thư mục chứa tệp thực thi và thư mục dữ liệu người dùng trong Factorio có thể khác nhau. Tìm thư mục mods tại vị trí dữ liệu người dùng trong tài liệu chính thức. Cài đặt Windows thông thường sử dụng %APPDATA%/Factorio/mods, nhưng cấu hình di động và tùy chỉnh sẽ khác. Hãy sao lưu các tệp lưu và cài đặt mod hiện có, sau đó tạo thư mục tm-practice_1.0.0.

tm-practice_1.0.0/
info.json
data.lua
locale/
en/strings.cfg
ko/strings.cfg2. Khai báo khả năng tương thích trong info.json
name là định danh nội bộ của bản mod và phải khớp với phần đầu của tên thư mục. version phải khớp với _1.0.0 của thư mục. factorio_version được cố định ở 2.0 để tránh nhầm lẫn với cấu trúc cho 1.1. Bản mẫu trò chơi gốc có thể được sử dụng do điều kiện base trong dependencies.
{
"name": "tm-practice",
"version": "1.0.0",
"title": "TroubleMaker Practice Plate",
"author": "TroubleMaker",
"factorio_version": "2.0",
"dependencies": ["base >= 2.0.0"],
"description": "An original item and recipe tutorial."
}3. Thêm vật phẩm và công thức vào data.lua
Sao chép bản mẫu vật phẩm của tấm sắt mặc định và đặt cho nó một tên mới cùng kích thước chồng (stack size). Biểu tượng tham chiếu đường dẫn nội bộ của trò chơi gốc mà bạn có, vì vậy hình ảnh trò chơi không bị trùng lặp vào tệp ZIP. Các thành phần (ingredients) và kết quả (results) của công thức được viết theo định dạng type/name/amount rõ ràng của Factorio 2.0. Đặt enabled=true để có thể tìm thấy nó trên bản đồ kiểm tra mà không cần mở khóa công nghệ riêng biệt.
local plate = table.deepcopy(data.raw.item["iron-plate"])
plate.name = "tm-practice-plate"
plate.order = "a[tm-practice-plate]"
plate.stack_size = 100
data:extend({
plate,
{
type = "recipe",
name = "tm-practice-plate",
enabled = true,
energy_required = 1,
ingredients = {
{type = "item", name = "iron-plate", amount = 2}
},
results = {
{type = "item", name = "tm-practice-plate", amount = 1}
}
}
})
4. Thêm tên hiển thị bằng tệp ngôn ngữ
Đặt văn bản dưới đây vào locale/ko/strings.cfg. Khớp chính xác tên bản mẫu trong các phần item-name và recipe-name. Nếu chuỗi Lua và khóa ngôn ngữ khác nhau, ID nội bộ hoặc Unknown key có thể được hiển thị.
[item-name]
tm-practice-plate=연습용 철판
[recipe-name]
tm-practice-plate=연습용 철판 제작
[item-description]
tm-practice-plate=모드 제작 학습용 아이템입니다.Trong locale/en/strings.cfg, hãy đặt các cụm từ tiếng Anh của riêng bạn như Practice plate, Make practice plate, An item for modding practice với cấu trúc khóa tương tự. Lưu tệp dưới dạng UTF-8. Lưu tệp .cfg dưới dạng JSON sẽ không đọc được.
5. Bật bản mod và xác minh quá trình chế tạo
- Chạy trò chơi và bật TroubleMaker Practice Plate trong mục Mods.
- Khi trò chơi khởi động lại để đọc bản mod, hãy đảm bảo không có thông báo lỗi nào.
- Chơi trong một bản sandbox mới hoặc bản đồ kiểm tra và chuẩn bị các tấm sắt.
- Tìm công thức tấm sắt luyện tập trong menu chế tạo và xác nhận rằng 2 tấm sắt biến thành 1 vật phẩm.
- So sánh xem tên và mô tả có hiển thị dưới dạng các cụm từ ngôn ngữ tương ứng trong cài đặt tiếng Hàn và tiếng Anh hay không.
- Thoát hoàn toàn trò chơi, tắt bản mod và kiểm tra cấu hình mặc định trong một bản đồ kiểm tra riêng biệt.
6. Thứ tự đọc lỗi
Khi quá trình tải mod dừng lại, hãy tìm lỗi đầu tiên trong factorio-current.log. Kiểm tra lỗi chính tả iron-plate và phần phụ thuộc base trước đối với lỗi cho biết thiếu bản mẫu, và định dạng results cùng ingredients đối với lỗi công thức. Nếu bản mod không có trong danh sách, hãy kiểm tra xem đường dẫn info.json có nằm bên trong hai lớp thư mục hay không. Biểu tượng là giống nhau, vì vậy việc ngoại hình giống với tấm sắt mặc định không phải là lỗi (bug). Sẽ dễ dàng hơn để kiểm tra sau khi bước này thành công nếu bạn thêm biểu tượng của riêng mình, mở khóa công nghệ và cân bằng.

7. Gỡ bỏ và chia sẻ
Gỡ bỏ bản mod đã thêm vật phẩm có thể làm cho các vật phẩm đó biến mất khỏi tệp lưu. Đừng tắt nó ngay lập tức trên tệp lưu nhà máy quan trọng; hãy kiểm tra trên bản sao lưu. Tệp ZIP được chia sẻ phải được tạo để chỉ chứa một thư mục tm-practice_1.0.0 và khớp với name cũng như version. Nêu rõ các điều kiện khi được thử nghiệm với các bản mod khác, trò chơi 2.0 được hỗ trợ và phần phụ thuộc base được sử dụng. Sau khi cập nhật trò chơi, hãy kiểm tra lại ba điều: tải, chế tạo và hiển thị tên, sau đó nâng cấp phiên bản phân phối.
Tài liệu gốc và tiêu chuẩn xác minh
Đây là hướng dẫn nhập môn do đội ngũ vận hành TroubleMaker viết bằng cách kiểm tra tài liệu công cụ chính thức và người tạo vào ngày 7 tháng 10 năm 2026. Mã và sơ đồ là các ví dụ tự tạo để giải thích và không xác minh kết quả chơi thực tế của trò chơi nói trên trên máy chủ này. Hãy phân phối sau khi kiểm tra trong một tệp lưu kiểm tra riêng với phiên bản được chỉ định trong văn bản chính. So sánh các phiên bản mới nhất và phần phụ thuộc của từng công cụ từ các nguồn gốc bên dưới.
Bản dịch tự động Gemini · Giữ nguyên văn bản và khu vực gốc.
Ngôn ngữ gốc · ko
팩토리오 모드 만드는 법: Lua로 아이템·레시피·한국어 이름 추가
Factorio 2.0에서 철판 두 개로 만드는 연습용 아이템 tm-practice-plate를 추가합니다. 아이템 prototype, 제작 recipe와 locale을 직접 만들어 모드 폴더로 읽는 예제입니다. Space Age 자산에 의존하지 않는 base 모드 기준이며 기존 공장 세이브 대신 별도 테스트 맵을 사용합니다.
[1. 모드 폴더와 파일 준비]
Factorio는 실행 파일이 있는 폴더와 사용자 데이터 폴더가 다를 수 있습니다. 공식 문서의 사용자 데이터 위치에서 mods 폴더를 찾으세요. 일반 Windows 설치는 %APPDATA%/Factorio/mods를 사용하지만 포터블·커스텀 구성은 달라집니다. 저장 파일과 기존 모드 설정을 백업하고 tm-practice_1.0.0 폴더를 만듭니다.
[image:conditions]
```text
tm-practice_1.0.0/
info.json
data.lua
locale/
en/strings.cfg
ko/strings.cfg
```
[2. info.json에 호환성을 선언하기]
name은 모드 내부 식별자이고 폴더 이름 앞부분과 맞춥니다. version은 폴더의 _1.0.0과 일치해야 합니다. factorio_version은 2.0으로 고정해 1.1용 구조와 혼동하지 않게 합니다. dependencies의 base 조건 때문에 기본 게임 prototype을 사용할 수 있습니다.
```json
{
"name": "tm-practice",
"version": "1.0.0",
"title": "TroubleMaker Practice Plate",
"author": "TroubleMaker",
"factorio_version": "2.0",
"dependencies": ["base >= 2.0.0"],
"description": "An original item and recipe tutorial."
}
```
[3. data.lua에 아이템과 제작법 넣기]
기본 철판의 item prototype을 복사해 새 이름과 스택 크기를 부여합니다. 아이콘은 사용자가 가진 base 게임의 내부 경로를 참조하므로 게임 이미지를 ZIP에 복제하지 않습니다. 레시피의 ingredients와 results는 Factorio 2.0의 명시적 type/name/amount 형식으로 작성합니다. enabled=true로 두어 별도 기술 해금 없이 테스트 맵에서 찾을 수 있게 합니다.
```lua
local plate = table.deepcopy(data.raw.item["iron-plate"])
plate.name = "tm-practice-plate"
plate.order = "a[tm-practice-plate]"
plate.stack_size = 100
data:extend({
plate,
{
type = "recipe",
name = "tm-practice-plate",
enabled = true,
energy_required = 1,
ingredients = {
{type = "item", name = "iron-plate", amount = 2}
},
results = {
{type = "item", name = "tm-practice-plate", amount = 1}
}
}
})
```
[image:request]
[4. locale로 표시 이름을 붙이기]
locale/ko/strings.cfg에 아래 텍스트를 넣습니다. item-name과 recipe-name 섹션에서 prototype 이름을 정확히 맞춥니다. Lua 문자열과 locale 키가 다르면 내부 ID나 Unknown key가 표시될 수 있습니다.
```ini
[item-name]
tm-practice-plate=연습용 철판
[recipe-name]
tm-practice-plate=연습용 철판 제작
[item-description]
tm-practice-plate=모드 제작 학습용 아이템입니다.
```
locale/en/strings.cfg에는 같은 키 구조로 Practice plate, Make practice plate, An item for modding practice라는 자체 영어 문구를 넣습니다. 파일은 UTF-8로 저장합니다. .cfg를 JSON 형태로 저장하면 읽히지 않습니다.
[5. 모드 켜고 제작 확인하기]
1. 게임을 실행하고 Mods에서 TroubleMaker Practice Plate를 활성화합니다.
2. 게임이 모드를 읽기 위해 재시작되면 오류 메시지가 없는지 확인합니다.
3. 새 샌드박스 또는 테스트 맵에서 플레이하고 철판을 준비합니다.
4. 제작 메뉴에서 연습용 철판 레시피를 찾고 철판 2개가 아이템 1개로 바뀌는지 확인합니다.
5. 한국어·영어 설정에서 이름과 설명이 해당 locale 문구로 보이는지 비교합니다.
6. 게임을 완전히 종료하고 모드를 비활성화한 뒤 별도 테스트 맵에서 기본 구성을 확인합니다.
[6. 오류를 읽는 순서]
모드 로딩이 멈추면 factorio-current.log에서 최초 오류를 찾습니다. prototype이 없다는 오류는 iron-plate 철자와 base 의존성, 레시피 오류는 results·ingredients 형식부터 확인합니다. 목록에 모드가 없으면 info.json 경로가 폴더 두 겹 안에 들어갔는지 확인하세요. 아이콘은 동일하므로 기본 철판과 외형이 같아도 버그는 아닙니다. 이 단계가 성공한 뒤 본인 제작 아이콘·기술 해금·밸런스를 추가하는 편이 테스트가 쉽습니다.
[image:contact]
[7. 제거와 공유]
아이템을 추가한 모드는 제거하면 세이브의 해당 아이템이 사라질 수 있습니다. 중요한 공장 세이브에서 바로 끄지 말고 백업한 복사본에서 확인합니다. 공유 ZIP은 tm-practice_1.0.0 폴더 한 개를 포함하도록 만들고 name·version을 맞춥니다. 다른 모드와 함께 테스트한 조건과 지원 게임 2.0, 사용한 base 의존성을 명시하세요. 게임 업데이트 후에는 로딩·제작·이름 표시 세 가지를 다시 확인하고 배포 버전을 올립니다.
[원본 문서와 확인 기준]
2026년 10월 7일 제작자·공식 도구 문서를 확인해 TroubleMaker 운영팀이 작성한 입문 공략입니다. 코드와 도식은 설명을 위한 자체 예제이며 이 서버에서 해당 게임의 실제 플레이를 검증한 결과는 아닙니다. 본문에 명시한 버전으로 별도 테스트 세이브에서 확인하고 배포하세요. 도구별 최신 버전·의존성은 아래 원본에서 대조합니다.
https://wiki.factorio.com/Tutorial:Modding_tutorial/Gangsir
https://wiki.factorio.com/Tutorial:Localisation
https://lua-api.factorio.com/latest/prototypes/RecipePrototype.html
https://wiki.factorio.com/Tutorial:Modding_tutorial
bình luận 1
Factorio 2.0에서 recipe의 ingredients와 results 형식을 명시적으로 작성할 때, 이전 버전과 달리 반드시 type을 지정해야 하는 구체적인 기술적 이유나 장점이 있을까요?