FCompensationData
Version Support
Section titled “Version Support”| Version | Status |
|---|---|
| v92 | Full |
| v90 | - |
| v86 | - |
FCompensation_{zone}.xml defines fishing compensation data: reward tables for the fishing minigame including catch grades, result item sets, experience rewards, and fish shapes.
DSL Support
Section titled “DSL Support”Entity: fCompensations
Operations: create, update, delete, upsert
File Organization: Zone-partitioned (one file per huntingZoneId)
Quick Recipes
Section titled “Quick Recipes”Create
Section titled “Create”spec: version: "1.0"
fCompensations: create: - huntingZoneId: 9001 compensationId: 1 tables: - id: 1 desc: "Common Fish Table" probability: 0.7 grades: - grade: 1 effectId: 100 weight: 50 resultItemSets: - id: 1 actionScriptId: 1000 minigameLevel: 1 weight: 100 items: - templateId: 70001 name: "Common Fish" min: 1 max: 1Creates a fishing compensation with a single table, grade, and result item set.
Create with Multiple Grades
Section titled “Create with Multiple Grades”spec: version: "1.0"
fCompensations: create: - huntingZoneId: 9001 compensationId: 2 tables: - id: 1 desc: "Advanced Fish Table" probability: 0.5 onlyByManual: false grades: - grade: 1 effectId: 100 weight: 60 resultItemSets: - id: 1 actionScriptId: 1000 minigameLevel: 1 weight: 80 exp: 50 fishShape: 1 items: - templateId: 70001 name: "Small Fish" min: 1 max: 2 - grade: 2 effectId: 101 weight: 30 resultItemSets: - id: 1 actionScriptId: 1001 minigameLevel: 2 weight: 100 exp: 100 fishShape: 2 items: - templateId: 70002 name: "Medium Fish" min: 1 max: 1 - grade: 3 effectId: 102 weight: 10 resultItemSets: - id: 1 actionScriptId: 1002 minigameLevel: 3 weight: 100 exp: 200 fishShape: 3 items: - templateId: 70003 name: "Large Fish" min: 1 max: 1 notifyLevel: "rare"Creates a fishing table with three quality grades and increasing rewards.
Update
Section titled “Update”spec: version: "1.0"
fCompensations: update: - huntingZoneId: 9001 compensationId: 1 changes: tables: - id: 1 probability: 0.8 desc: "Updated Fish Table"Updates an existing fishing compensation’s table configuration.
Delete
Section titled “Delete”spec: version: "1.0"
fCompensations: delete: - huntingZoneId: 9001 compensationId: 1Removes the fishing compensation entry.
Upsert
Section titled “Upsert”spec: version: "1.0"
fCompensations: upsert: - huntingZoneId: 9001 compensationId: 3 tables: - id: 1 desc: "Event Fish Table" probability: 1.0 grades: - grade: 1 effectId: 200 weight: 100 resultItemSets: - id: 1 actionScriptId: 2000 minigameLevel: 1 weight: 100 items: - templateId: 80001 name: "Event Fish" min: 1 max: 5Creates or replaces the fishing compensation entry.
Managing Tables, Grades, and Items
Section titled “Managing Tables, Grades, and Items”The DSL uses replace-all semantics for nested structures. There are no granular operations to add or remove individual tables, grades, result item sets, or items. Instead, use the update operation with a complete hierarchy.
Adding a new grade to an existing table:
spec: version: "1.0"
fCompensations: update: - huntingZoneId: 9001 compensationId: 1 changes: tables: - id: 1 desc: "Updated Fish Table" probability: 0.7 grades: # Include existing grade you want to keep - grade: 1 effectId: 100 weight: 50 resultItemSets: - id: 1 actionScriptId: 1000 minigameLevel: 1 weight: 100 items: - templateId: 70001 name: "Common Fish" min: 1 max: 1 # Add the new grade - grade: 2 effectId: 101 weight: 30 resultItemSets: - id: 1 actionScriptId: 1001 minigameLevel: 2 weight: 100 items: - templateId: 70002 name: "Rare Fish" min: 1 max: 1Removing a table/grade: Simply omit it from the respective list in your update.
Adding an item to a result item set: Include all existing items plus the new one in the items list.
Removing an item: Omit it from the items list.
Properties Reference
Section titled “Properties Reference”Compensation (Root Entry)
Section titled “Compensation (Root Entry)”| Property | Type | Since | Required | Description |
|---|---|---|---|---|
huntingZoneId | int | v92 | Yes | Hunting zone ID (file partition key) |
compensationId | int | v92 | Yes | Unique compensation ID (primary key) |
tables | list | v92 | No | List of fishing reward tables |
Table (Nested)
Section titled “Table (Nested)”| Property | Type | Since | Required | Description |
|---|---|---|---|---|
id | int | v92 | Yes | Unique table identifier |
desc | string | v92 | Yes | Description of the fishing table |
probability | decimal | v92 | Yes | Table selection probability (0.0 to 1.0) |
onlyByManual | boolean | v92 | No | Only activated by manual trigger |
grades | list | v92 | No | List of grade configurations |
Grade (Nested)
Section titled “Grade (Nested)”| Property | Type | Since | Required | Description |
|---|---|---|---|---|
grade | int | v92 | Yes | Grade level identifier |
effectId | int | v92 | Yes | Visual effect ID for this grade |
weight | int | v92 | Yes | Selection weight (relative probability) |
resultItemSets | list | v92 | No | List of result item sets |
ResultItemSet (Nested)
Section titled “ResultItemSet (Nested)”| Property | Type | Since | Required | Description |
|---|---|---|---|---|
id | int | v92 | Yes | Unique result item set identifier |
actionScriptId | int | v92 | Yes | Action script to execute on catch |
minigameLevel | int | v92 | Yes | Minigame difficulty level |
weight | int | v92 | Yes | Selection weight (relative probability) |
exp | int | v92 | No | Experience points awarded |
fishShape | int | v92 | No | Visual fish shape identifier |
items | list | v92 | No | List of reward items |
Item (Nested)
Section titled “Item (Nested)”| Property | Type | Since | Required | Description |
|---|---|---|---|---|
templateId | int | v92 | Yes | Item template ID |
name | string | v92 | Yes | Display name for the item |
min | int | v92 | Yes | Minimum drop quantity |
max | int | v92 | Yes | Maximum drop quantity |
notifyLevel | string | v92 | No | Notification level for rare catches |
XML Structure
Section titled “XML Structure”FCompensationData uses 5-level nesting:
FCompensationData (huntingZoneId)└── Compensation (compensationId) [max 2] └── Table (id, desc, probability, onlyByManual?) └── Grade (grade, effectId, weight) [max 10] └── ResultItemSet (id, actionScriptId, minigameLevel, weight, exp?, fishShape?) └── Item (templateId, name, min, max, notifyLevel?) [max 3]Notation:
attr?= optional attribute[max N]= maximum occurrence count
Common Pitfalls
Section titled “Common Pitfalls”-
Different Key Structure: FCompensation uses
compensationIdas primary key, NOTnpcTemplateIdlike I/E/C compensations. -
Weight-Based Selection: Grades and ResultItemSets use
weightfor relative probability, not absoluteprobabilityvalues. Higher weight = higher selection chance. -
5-Level Nesting: The deepest nesting of any compensation type. Ensure proper indentation in YAML.
-
Item Limits: Each ResultItemSet can contain at most 3 items. Each Table can contain at most 10 Grades.
-
ActionScriptId Required: Every ResultItemSet must have an
actionScriptIdto define the catch behavior. -
NotifyLevel for Rare Catches: Use
notifyLevelto trigger announcements for rare fish catches. -
MinigameLevel Scaling: The
minigameLevelshould scale with grade to increase difficulty for better rewards. -
Replace-All for Nested Structures: The DSL does not support granular add/remove for tables, grades, or items. When updating
tables, the entire hierarchy is replaced. Include all tables, grades, result item sets, and items you want to preserve in your update operation.