---
title: "คู่มือการเขียน OP.GG Champion Build Builder"
description: "แหล่งอ้างอิงเรื่องการเขียน raw Markdown การตรวจสอบ และการกู้คืน สำหรับผู้ช่วย AI และ browser agents"
language: th
canonical: https://op.gg/th/lol/user-guides/help
---

# คู่มือการเขียน OP.GG Champion Build Builder

> คำแนะนำสำหรับผู้ช่วย AI และ browser agents ที่ใช้อธิบายหรือใช้งาน OP.GG Champion Build Builder

นี่คือคู่มือแบบ machine-readable สำหรับภาษาไทยของ builder ปัจจุบัน

- Canonical HTML: https://op.gg/th/lol/user-guides/help
- Markdown URL: https://op.gg/th/lol/user-guides/help.md
- URL สำหรับบิลด์ใหม่: https://op.gg/th/lol/user-guides/new
- URL รายการบิลด์: https://op.gg/th/lol/user-guides

## เลือกโหมดการเขียน

- ใช้ตัวแก้ไขแบบฟอร์มเป็นค่าเริ่มต้น
- ใช้ raw Markdown เฉพาะเมื่อผู้ใช้ขอรูปแบบซอร์ส หรือเมื่อการแก้ข้อความจำนวนมากต้องควบคุมโดยตรง
- ก่อนโหลดตัวอย่างหรือแทนที่เนื้อหา ให้ตรวจแบบร่างที่มีอยู่และสถานะบันทึกอัตโนมัติ
- ตรวจ Preview และสถานะการตรวจสอบทุกครั้งก่อนเผยแพร่

## การยืนยันตัวตนและการเก็บแบบร่าง

- แบบร่างถูกบันทึกในเบราว์เซอร์ปัจจุบัน ไม่ได้อยู่ในบัญชีของคุณ
- แบบร่างเดียวกันจะไม่แสดงอัตโนมัติในเบราว์เซอร์อื่นหรืออุปกรณ์อื่น
- หลังเผยแพร่สำเร็จ แบบร่างของไกด์นั้นจะถูกล้างจากเบราว์เซอร์นี้
- raw Markdown เป็นโหมดขั้นสูงสำหรับแก้ไขโครงสร้างเอกสารโดยตรง
- ถ้า raw source มีปัญหา คุณอาจกลับสู่โหมดแบบฟอร์มไม่ได้จนกว่าจะแก้ diagnostics
- Summoner Card เป็นเนื้อหาคงที่และแก้ไขโดยตรงใน raw Markdown ไม่ได้
- อย่าแก้ localStorage โดยตรงหรือข้ามการยืนยันตัวตนที่จำเป็นสำหรับการเผยแพร่

## สร้างบิลด์ด้วยตัวแก้ไขแบบฟอร์ม

1. เปิด URL สำหรับบิลด์ใหม่ตามที่ระบุไว้ด้านบนให้ตรงทุกตัว
2. ตรวจว่ามีการกู้คืนแบบร่างเดิมในเบราว์เซอร์หรือไม่ และตรวจสถานะบันทึกอัตโนมัติ
3. ตั้งค่าแชมเปี้ยน ชื่อ ตำแหน่ง และแพตช์
4. เพิ่มแท็กจุดประสงค์หรือแท็กที่กำหนดเอง และ Summoner Card แบบไม่บังคับเมื่อมีการร้องขอ
5. ใช้ + Add block หรือคำสั่ง / เพื่อเพิ่มบล็อกที่จำเป็น
6. เติมข้อมูลทุกบล็อก แล้วจัดบล็อกตามลำดับการอ่าน
7. เปิด Preview แล้วตรวจปัญหาการตรวจสอบทุกข้อ รวมถึงเอกสารสาธารณะที่ได้
8. เผยแพร่เฉพาะในขอบเขตที่ผู้ใช้ขอ และหลังจากการยืนยันตัวตนกับการตรวจสอบสำเร็จแล้วเท่านั้น

## ประเภทบล็อกที่รองรับ

| ชื่อที่ผู้ใช้เห็น | ประเภท canonical | raw directive |
| --- | --- | --- |
| ข้อความ | `text` | `CommonMark paragraph` |
| หัวข้อ 1 | `heading1` | `##` |
| หัวข้อ 2 | `heading2` | `###` |
| บิลด์ไอเทม | `ItemBuild` | `opgg lol ItemBuild` |
| บิลด์รูน | `RuneBuild` | `opgg lol RuneBuild` |
| บิลด์รูน Classic | `ClassicRuneBuild` | `opgg lol ClassicRuneBuild 1` |
| บิลด์ Mastery Classic | `ClassicMasteryBuild` | `opgg lol ClassicMasteryBuild 1` |
| ลำดับสกิล | `SkillOrder` | `opgg lol SkillOrder` |
| ซัมมอนเนอร์สเปล | `SummonerSpells` | `opgg lol SummonerSpells` |
| Tier List | `TierList` | `opgg lol TierList` |
| ตัววางแผนเส้นทางป่า | `JungleRoute` | `opgg lol JungleRoute` |
| ตัวอย่างลิงก์ | `LinkEmbed` | `opgg lol LinkEmbed 1` |
| บันทึกแมตช์ | `MatchRecord` | `opgg lol MatchRecord 1` |
| YouTube | `YouTube` | `opgg YouTube` |
| Summoner Card | `SummonerCard` | แคปซูลอ่านอย่างเดียว เพิ่มจากแบบฟอร์ม |

อย่าแสดง opaque หรือ hr เป็นบล็อกปกติที่ผู้ใช้เพิ่มได้ SummonerCard เป็นแคปซูลคงที่ ไม่ใช่บล็อกเนื้อหาที่เพิ่มซ้ำได้

## รูปแบบเอกสาร raw Markdown

ซอร์สของ builder เป็นรูปแบบเอกสาร OP.GG ที่ฝังอยู่ใน Markdown และต่างจาก CommonMark ที่ใช้แสดงหน้าช่วยเหลือนี้

```markdown
# บิลด์ Ahri mid

---
GameMode: LIVE
Champion: Ahri
Position: mid
Patch: latest
> ตัวอย่างบิลด์ที่เน้นเลน
---

## วิธีเล่น

อธิบายแผนตรงนี้
```

- H1 แรกคือชื่อบิลด์
- ส่วน metadata จะอยู่ระหว่างตัวคั่น --- ทันทีหลัง H1
- GameMode คือ RANKED หรือ CLASSIC และใช้เลือกชุดแอสเซ็ตของเอกสาร
- Position ต้องเป็น top, jungle, mid, adc หรือ support
- หัวข้อ H2 และ H3 ที่แสดงผลจะจับคู่กับบล็อก heading1 และ heading2 ของ builder

## การอ้างอิงแอสเซ็ต

ใช้ Riot IDs ที่เสถียรในโทเคนซอร์ส แทนชื่อที่แสดงผลเฉพาะแต่ละภาษา

```text
<@lol-champion-103>
<@lol-item-1054>
<@lol-spell-4>
<@lol-rune-8005>
<@lol-shard-5008>
<@lol-skill-103-Q>
```

- โทเคน Champion, item, spell, rune และ shard ต้องใช้ IDs ที่เป็นจำนวนเต็มบวก
- โทเคน Skill ต้องใช้ champion ID ที่เป็นจำนวนเต็มบวก และ Q, W, E หรือ R ตัวพิมพ์ใหญ่
- อย่าใช้ลิงก์แอสเซ็ต opgg:// แบบเก่าในซอร์สใหม่
- ชื่อและไอคอนจะถูกดึงจากภาษาปัจจุบันและแพตช์ที่เลือกเมื่อแสดงผล

## ข้อมูลอ้างอิงบล็อกแบบมีโครงสร้าง

ตัวอย่างที่ถูกต้องด้านล่างสร้างโดย serializer ปัจจุบัน ให้คงลำดับ compact-list สตริงในเครื่องหมายคำพูด numeric IDs และ enums ตัวพิมพ์ใหญ่ไว้เหมือนเดิม

### บิลด์ไอเทม (`ItemBuild`)

- ใช้เมื่อ: แชร์ตัวเลือกไอเทมเริ่มต้น รองเท้า ไอเทมหลัก และไอเทมตามสถานการณ์
- เส้นทาง UI: + Add block → บิลด์ไอเทม หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก บิลด์ไอเทม
- raw directive: `opgg lol ItemBuild`
- ฟิลด์ที่ serialize ตามลำดับ: `starter, boots, core, situational`
- ข้อกำหนดในการเขียน: ใช้อาร์เรย์ที่เข้ากันได้กับ serializer และมี item IDs เป็นจำนวนเต็มบวก
- สถานะสำเร็จ: กลุ่มไอเทมทั้งสี่จะแสดงตามลำดับที่ serialize ไว้
- ข้อผิดพลาดที่พบบ่อย: ฟิลด์บังคับที่ไม่ใช่อาร์เรย์จะทำให้ fence ไม่ถูกต้อง IDs ที่ไม่เป็นจำนวนเต็มบวกหรือชื่อที่แสดงผลอาจจับคู่กับแอสเซ็ตไม่ได้

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol ItemBuild latest
starter: [1054]
boots: [3020]
core: [6655,3089]
situational: []
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol ItemBuild latest
starter: 1054
boots: []
core: []
situational: []
```
````

### บิลด์รูน (`RuneBuild`)

- ใช้เมื่อ: แชร์สายรูน รูนที่เลือก และ stat shards
- เส้นทาง UI: + Add block → บิลด์รูน หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก บิลด์รูน
- raw directive: `opgg lol RuneBuild`
- ฟิลด์ที่ serialize ตามลำดับ: `primaryStyle, secondaryStyle, primaryRunes, secondaryRunes, shards`
- ข้อกำหนดในการเขียน: คง numeric path enums ที่ serializer สร้างไว้ และใช้ rune หรือ shard IDs เป็นจำนวนเต็มบวก
- สถานะสำเร็จ: ทั้งสองสาย รูนที่เลือก และ shards จะแสดงผล
- ข้อผิดพลาดที่พบบ่อย: รายการรูนบังคับที่ไม่ใช่อาร์เรย์จะทำให้ fence ไม่ถูกต้อง รูปแบบหรือการอ้างอิงที่ไม่เป็น canonical อาจแสดงผลไม่ตรงที่ตั้งใจ

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol RuneBuild latest
primaryStyle: 8000
secondaryStyle: 8100
primaryRunes: [8005,8009,9103,8014]
secondaryRunes: [8126,8141]
shards: [5008,5010,5001]
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol RuneBuild latest
primaryStyle: 8000
secondaryStyle: 8100
primaryRunes: 8005
secondaryRunes: []
shards: []
```
````

### บิลด์รูน Classic (`ClassicRuneBuild`)

- ใช้เมื่อ: แชร์หน้ารูน Classic แบบ 30 ช่อง
- เส้นทาง UI: + Add block → บิลด์รูน Classic หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก บิลด์รูน Classic
- raw directive: `opgg lol ClassicRuneBuild 1`
- ฟิลด์ที่ serialize ตามลำดับ: `ruleset, slots`
- ข้อกำหนดในการเขียน: ใช้ ruleset CLASSIC_1 พร้อมคู่ slot-and-rune ID ไม่เกิน 30 คู่ แต่ละ slot ต้องเป็นจำนวนเต็มไม่ซ้ำตั้งแต่ 1 ถึง 30 แต่ละ rune ID ต้องเป็นจำนวนเต็มบวก และแต่ละรูนต้องตรงกับประเภท slot ของตัวเอง
- สถานะสำเร็จ: รูน Classic แต่ละอันที่เลือกจะแสดงใน slot ประเภทที่ตรงกัน
- ข้อผิดพลาดที่พบบ่อย: ruleset ที่ไม่รองรับ slot ซ้ำ รูนที่ใส่ใน slot ผิดประเภท หรือ JADE rune ที่ไม่รู้จักจะบล็อกการเผยแพร่

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol ClassicRuneBuild 1
ruleset: CLASSIC_1
slots: [[1,775253],[10,775317]]
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol ClassicRuneBuild 1
ruleset: CLASSIC_1
slots: [[1,5273],[1,5317]]
```
````

### บิลด์ Mastery Classic (`ClassicMasteryBuild`)

- ใช้เมื่อ: แชร์การจัดสรรผัง Mastery Classic
- เส้นทาง UI: + Add block → บิลด์ Mastery Classic หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก บิลด์ Mastery Classic
- raw directive: `opgg lol ClassicMasteryBuild 1`
- ฟิลด์ที่ serialize ตามลำดับ: `ruleset, ranks`
- ข้อกำหนดในการเขียน: ใช้ ruleset CLASSIC_1 พร้อมคู่ mastery-ID-and-rank ไม่เกิน 60 คู่ แต่ละ mastery ID ที่เป็นบวกปรากฏได้ครั้งเดียว rank ต้องเป็นจำนวนเต็มตั้งแต่ 1 ถึง 5 และต้องไม่เกิน rank สูงสุดของ mastery นั้น ต้องผ่านเงื่อนไขก่อนหน้า และรวมแล้วต้องไม่เกิน 30 แต้ม
- สถานะสำเร็จ: rank ที่เลือกจะแสดงในผัง Mastery Classic
- ข้อผิดพลาดที่พบบ่อย: ruleset ที่ไม่รองรับ mastery ซ้ำ rank ไม่ถูกต้อง หรือ JADE mastery ที่ไม่รู้จักจะบล็อกการเผยแพร่

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol ClassicMasteryBuild 1
ruleset: CLASSIC_1
ranks: [[512,4],[514,2]]
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol ClassicMasteryBuild 1
ruleset: CLASSIC_1
ranks: [[511,1],[511,4]]
```
````

### ลำดับสกิล (`SkillOrder`)

- ใช้เมื่อ: แสดงลำดับความสำคัญของสกิลและลำดับตามแต่ละเลเวล
- เส้นทาง UI: + Add block → ลำดับสกิล หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก ลำดับสกิล
- raw directive: `opgg lol SkillOrder`
- ฟิลด์ที่ serialize ตามลำดับ: `priority, order`
- ข้อกำหนดในการเขียน: priority และ order มีได้เฉพาะ Q, W, E และ R
- สถานะสำเร็จ: ลำดับความสำคัญและลำดับสกิลจะแสดงตามลำดับที่บันทึกไว้
- ข้อผิดพลาดที่พบบ่อย: skill key ที่ไม่รู้จักจะทำให้ fence ไม่ถูกต้อง

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol SkillOrder latest
priority: [Q,E,W,R]
order: [Q,E,W,Q,Q,R]
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol SkillOrder latest
priority: [Q,X,W,R]
order: [Q,X]
```
````

### ซัมมอนเนอร์สเปล (`SummonerSpells`)

- ใช้เมื่อ: แนะนำคู่ summoner spell
- เส้นทาง UI: + Add block → ซัมมอนเนอร์สเปล หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก ซัมมอนเนอร์สเปล
- raw directive: `opgg lol SummonerSpells`
- ฟิลด์ที่ serialize ตามลำดับ: `spells`
- ข้อกำหนดในการเขียน: ใช้อาร์เรย์ของ spell IDs ที่เป็นจำนวนเต็มบวก
- สถานะสำเร็จ: คู่สเปลที่เลือกจะแสดงผล
- ข้อผิดพลาดที่พบบ่อย: ค่า spells ที่ไม่ใช่อาร์เรย์จะทำให้ fence ไม่ถูกต้อง IDs ที่ไม่เป็นจำนวนเต็มบวกหรือชื่อที่แสดงผลอาจจับคู่กับสเปลไม่ได้

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol SummonerSpells latest
spells: [4,12]
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol SummonerSpells latest
spells: 4
```
````

### Tier List (`TierList`)

- ใช้เมื่อ: จัดอันดับแอสเซ็ตแชมเปี้ยน ไอเทม หรือรูนในแถวที่มีป้ายกำกับ
- เส้นทาง UI: + Add block → Tier List หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก Tier List
- raw directive: `opgg lol TierList`
- ฟิลด์ที่ serialize ตามลำดับ: `schemaVersion, segment, assetType, preset, rows, unranked, ```, ## Synergy, > Teamfight impact, ```opgg lol TierList latest, schemaVersion, segment, index, ```, ### Best, Reliable pairings, ```opgg lol TierList latest, schemaVersion, segment, index, ```, ### Good, ```opgg lol TierList latest, schemaVersion, segment`
- ข้อกำหนดในการเขียน: ต้องวางแอสเซ็ตที่ถูกต้องอย่างน้อยหนึ่งรายการใน tier
- สถานะสำเร็จ: แถว palette IDs คำอธิบาย และแอสเซ็ตที่จัดอันดับจะแสดงตามลำดับ
- ข้อผิดพลาดที่พบบ่อย: enum ที่ไม่รู้จัก color ID แอสเซ็ตซ้ำ หรือพื้นที่จัดอันดับว่างจะบล็อกการเผยแพร่

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol TierList latest
schemaVersion: 1
segment: START
assetType: CHAMPION
preset: SYNERGY
rows: [[1,[79]],[4,[75]]]
unranked: []
```

## Synergy

> Teamfight impact

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 0
```

### Best

Reliable pairings

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 1
```

### Good

```opgg lol TierList latest
schemaVersion: 1
segment: END
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol TierList latest
schemaVersion: 1
segment: START
assetType: CHAMPION
preset: CUSTOM
rows: [[99,[103]],[2,[]]]
unranked: []
```

## Matchups

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 0
```

### S

```opgg lol TierList latest
schemaVersion: 1
segment: ROW
index: 1
```

### A

```opgg lol TierList latest
schemaVersion: 1
segment: END
```
````

### ตัววางแผนเส้นทางป่า (`JungleRoute`)

- ใช้เมื่อ: อธิบายและเปรียบเทียบเส้นทางป่า
- เส้นทาง UI: + Add block → ตัววางแผนเส้นทางป่า หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก ตัววางแผนเส้นทางป่า
- raw directive: `opgg lol JungleRoute`
- ฟิลด์ที่ serialize ตามลำดับ: `map, title, plans`
- ข้อกำหนดในการเขียน: ต้องมีอย่างน้อยหนึ่งแผนที่มีจุดแวะตั้งแต่สองจุดขึ้นไป และเวลาไปถึงที่กรอกต้องเพิ่มขึ้นอย่างเคร่งครัด
- สถานะสำเร็จ: เส้นทางที่เรียงไว้จะแสดงบน minimap และรายการจุดแวะ
- ข้อผิดพลาดที่พบบ่อย: เวลาไปถึงที่กรอกแล้วไม่เพิ่มขึ้นจะทำให้เส้นทางไม่สมบูรณ์

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol JungleRoute latest
map: 1
title: "Blue-side opening"
plans: [[PLAN_A,"Primary route",[[5,CLEAR,95],[4,CLEAR,120]]],[PLAN_B,"Alternative route",[]]]
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol JungleRoute latest
map: 1
title: "Opening"
plans: [[PLAN_A,"Primary",[[5,CLEAR,120,""],[4,CLEAR,95,""]]],[PLAN_B,"Alternative",[]]]
```
````

### ตัวอย่างลิงก์ (`LinkEmbed`)

- ใช้เมื่อ: แสดงหน้าภายนอกที่รองรับเป็นตัวอย่าง
- เส้นทาง UI: + Add block → ตัวอย่างลิงก์ หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก ตัวอย่างลิงก์
- raw directive: `opgg lol LinkEmbed 1`
- ฟิลด์ที่ serialize ตามลำดับ: `url`
- ข้อกำหนดในการเขียน: ใช้ URL แบบ absolute http หรือ https ที่ไวยากรณ์ถูกต้องหนึ่งรายการ
- สถานะสำเร็จ: ตัวอย่างลิงก์ที่ตั้งใจไว้จะ resolve สำเร็จ
- ข้อผิดพลาดที่พบบ่อย: URL ที่ไม่ปลอดภัยหรือรูปแบบผิดจะทำให้ fence ไม่ถูกต้อง ให้ยืนยันตัวอย่างที่ resolve แล้วแยกต่างหาก

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol LinkEmbed 1
url: "http://www.op.gg/"
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol LinkEmbed 1
url: "javascript:alert(1)"
```
````

### บันทึกแมตช์ (`MatchRecord`)

- ใช้เมื่อ: อ้างอิงผู้เข้าร่วมหนึ่งคนจากแมตช์ OP.GG เฉพาะ
- เส้นทาง UI: + Add block → บันทึกแมตช์ หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก บันทึกแมตช์
- raw directive: `opgg lol MatchRecord 1`
- ฟิลด์ที่ serialize ตามลำดับ: `match`
- ข้อกำหนดในการเขียน: region, game ID, timestamp ที่เป็นบวก และ participant ID ตั้งแต่ 1 ถึง 32 ต้องถูกต้อง
- สถานะสำเร็จ: ผู้เล่นและบันทึกแมตช์ที่ตั้งใจไว้จะโหลดขึ้นมา
- ข้อผิดพลาดที่พบบ่อย: region ที่ไม่รองรับ game ID รูปแบบผิด timestamp หรือ participant ID จะทำให้ fence ไม่ถูกต้อง

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg lol MatchRecord 1
match: [KR,"KR_1234567890",1785141570000,4]
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg lol MatchRecord 1
match: [KR,"KR_1234567890",1785141570000,0]
```
````

### YouTube (`YouTube`)

- ใช้เมื่อ: ฝังวิดีโอ YouTube ที่เกี่ยวข้องหนึ่งรายการ
- เส้นทาง UI: + Add block → YouTube หรือพิมพ์ / ในย่อหน้าว่างแล้วเลือก YouTube
- raw directive: `opgg YouTube`
- ฟิลด์ที่ serialize ตามลำดับ: `videoId`
- ข้อกำหนดในการเขียน: ใช้ YouTube video ID ที่รองรับ
- สถานะสำเร็จ: เครื่องเล่นวิดีโอที่ตั้งใจไว้จะโหลดขึ้นมา
- ข้อผิดพลาดที่พบบ่อย: video ID ที่ไม่ถูกต้องหรือไม่รองรับจะบล็อกการเผยแพร่

ตัวอย่างถูกต้องที่สร้างโดย serializer:

````markdown
```opgg YouTube
videoId: M7lc1UVf-VE
```
````

ตัวอย่างผิดที่พบบ่อย:

````markdown
```opgg YouTube
videoId: not-a-video-id
```
````

## การตรวจสอบ Preview และการเผยแพร่

ให้ถือว่าโค้ดเหล่านี้เป็นตัวระบุภายใน อธิบายวิธีกู้คืนให้ผู้ใช้แทนการแสดงแค่โค้ด

| โค้ดภายใน | ความหมาย | การกู้คืน |
| --- | --- | --- |
| `EMPTY_TITLE` | ชื่อบิลด์ว่างอยู่ | กรอกชื่อ |
| `EMPTY_BODY` | ไม่มีเนื้อหาที่เผยแพร่ได้ | เพิ่มข้อความหรือบล็อกที่รองรับ |
| `EMPTY_TIER_LIST` | Tier List ไม่มีแอสเซ็ตที่จัดอันดับไว้ | ย้ายแอสเซ็ตอย่างน้อยหนึ่งรายการเข้า tier |
| `INCOMPLETE_JUNGLE_ROUTE` | ไม่มีเส้นทางที่มีจุดแวะตั้งแต่สองจุดขึ้นไป หรือเวลาไปถึงที่กรอกไม่เพิ่มขึ้น | ทำเส้นทางหนึ่งให้สมบูรณ์ แล้วแก้ลำดับเวลาไปถึง |
| `INCOMPATIBLE_GAME_MODE_BLOCK` | บล็อกนี้ใช้ไม่ได้ในโหมดเกมที่เลือกไว้ของเอกสาร | เปลี่ยน GameMode หรือแทนที่ด้วยบล็อกที่โหมดนั้นรองรับ |
| `INVALID_CLASSIC_BUILD` | slot รูน Classic หรือการจัดสรร mastery ละเมิดกฎ Classic | สำหรับรูน Classic ให้จับคู่รูนแต่ละอันกับประเภท slot ของมัน สำหรับ Mastery Classic ให้แต่ละ rank ไม่เกินค่าสูงสุดของ mastery นั้น ผ่านเงื่อนไขก่อนหน้า และจัดสรรไม่เกิน 30 แต้ม |
| `INVALID_MATCH_RECORD_FENCE` | การอ้างอิง MatchRecord ไม่ถูกต้อง | วางลิงก์แมตช์ OP.GG ที่ถูกต้องแล้ว resolve อีกครั้ง |
| `INVALID_LINK_EMBED_FENCE` | การอ้างอิง LinkEmbed ไม่ถูกต้อง | ใช้ URL ที่ถูกต้องในรูปแบบที่รองรับ |
| `INVALID_YOUTUBE_FENCE` | การอ้างอิง YouTube ไม่ถูกต้อง | ใช้ YouTube URL หรือ video ID ที่รองรับ |
| `INVALID_GAME_MODE_METADATA` | metadata ของ GameMode ไม่ใช่ RANKED หรือ CLASSIC | ตั้งค่า GameMode เป็น RANKED หรือ CLASSIC |
| `INVALID_SUMMONER_CARD_CAPSULE` | แคปซูล SummonerCard แบบคงที่ไม่ถูกต้อง | ลบออกหรือเลือกบัญชี Riot อีกครั้งในโหมดแบบฟอร์ม |
| `OPAQUE_DIAGNOSTIC` | เนื้อหา raw ที่เก็บไว้มี diagnostic | แก้หรือลบ raw source ที่ถูกวินิจฉัย |
| `FORM_CONVERSION_BLOCKED` | เนื้อหา raw ไม่สามารถแปลงเป็นบล็อกแบบฟอร์มได้อย่างปลอดภัย | แก้ raw diagnostic ทั้งหมดก่อนกลับสู่โหมดแบบฟอร์ม |

## แก้ไขหรือทำสำเนาบิลด์ที่มีอยู่

- เมื่อแก้ไขไกด์ที่เผยแพร่แล้ว แชมเปี้ยน ตำแหน่ง และแพตช์จะถูกล็อก
- ถ้าต้องการทำสำหรับแพตช์ใหม่ ให้ทำสำเนาไกด์เดิมแล้วแก้ไขสำเนา
- สำเนาอาจเก็บผู้เขียนเดิมและลิงก์ต้นทางไว้

## การแก้ไขปัญหา

- **บันทึกอัตโนมัติล้มเหลว** — อาการ: บันทึกแบบร่างไม่ได้ สาเหตุที่เป็นไปได้: พื้นที่เก็บข้อมูลของเบราว์เซอร์ใช้ไม่ได้หรือเต็ม วิธีแก้: คัดลอกงานของคุณไปไว้ที่ปลอดภัย กู้การเข้าถึงพื้นที่เก็บข้อมูลของเบราว์เซอร์ แล้วแก้ไขอีกครั้งเพื่อให้บันทึกอัตโนมัติลองใหม่
- **อ่านแบบร่างที่บันทึกไว้ไม่ได้** — อาการ: ระบบแสดง payload เดิมเพื่อให้กู้คืน สาเหตุที่เป็นไปได้: รูปแบบที่เก็บไว้ผิดหรือเก่าเกินไป วิธีแก้: คัดลอกข้อความที่ต้องใช้ แล้วตัดสินใจว่าจะแทนที่แบบร่างที่อ่านไม่ได้ก่อนดำเนินการต่อหรือไม่
- **ข้อมูลแพตช์ไม่ตรงกัน** — อาการ: ชื่อและไอคอนแอสเซ็ตมาจากคนละแพตช์ สาเหตุที่เป็นไปได้: metadata เปลี่ยนก่อนโหลดข้อมูลแอสเซ็ตใหม่ วิธีแก้: โหลดข้อมูลแอสเซ็ตของแพตช์ที่เลือกใหม่
- **กลับสู่โหมดแบบฟอร์มไม่ได้** — อาการ: raw diagnostics ยังแสดงอยู่ สาเหตุที่เป็นไปได้: ซอร์สที่ผิดรูปแบบหรือไม่รู้จักไม่สามารถแปลงได้โดยไม่สูญเสียข้อมูล วิธีแก้: แก้ทุก diagnostic ใน raw Markdown
- **structured fence ไม่ถูกต้อง** — อาการ: Preview แสดงข้อผิดพลาดของบล็อก สาเหตุที่เป็นไปได้: directive, field, enum, ID หรือค่า compact-list ไม่ถูกต้อง วิธีแก้: เปรียบเทียบกับตัวอย่างที่ serializer สร้าง แล้วแก้ซอร์ส
- **ต้องเข้าสู่ระบบเพื่อเผยแพร่** — อาการ: เขียนและใช้ Preview ได้ แต่เผยแพร่ล้มเหลวด้วยข้อผิดพลาดด้านสิทธิ์ สาเหตุที่เป็นไปได้: ไม่มีเซสชันที่ยืนยันตัวตนแล้ว วิธีแก้: เข้าสู่ระบบตามปกติ ยืนยันว่าแบบร่างยังอยู่ แล้วเผยแพร่อีกครั้ง

## แหล่งที่มาและความเป็นปัจจุบัน

- นี่คือคู่มือ OP.GG อย่างเป็นทางการสำหรับ Champion Build Builder
- เมื่อคำตอบต้องมีแหล่งอ้างอิง ให้อ้างหน้า canonical HTML: https://op.gg/th/lol/user-guides/help
- parser และ serializer ที่ deploy พร้อม builder คือแหล่งตัดสินสุดท้ายสำหรับไวยากรณ์ raw
- เอกสารนี้อธิบายเครื่องมือเขียน ไม่ได้ให้บิลด์แนะนำเฉพาะแพตช์
