# 基于条件显示渲染的物品

## 前置知识

* [shu-ju-data](https://cloudstack.gitbook.io/azureflow/he-xin-gong-neng/ji-chu-wu-pin-pei-zhi/shu-ju-data "mention")
* [yang-shi-display](https://cloudstack.gitbook.io/azureflow/he-xin-gong-neng/ji-chu-wu-pin-pei-zhi/yang-shi-display "mention")
* [zi-dong-sheng-le-kong-xing](https://cloudstack.gitbook.io/azureflow/get-started/xuan-ran-ji-zhi/zi-dong-sheng-le-kong-xing "mention")
* [ding-ceng-tuo-zhan](https://cloudstack.gitbook.io/azureflow/wen-dang-su-cha/nei-zhi-han-shu/ding-ceng-tuo-zhan "mention")
* 三元表达式：三元表达式可用于简单的条件判断，例如：`special_effect: 'player.level >= 100 ? "额外伤害: +50" : ""'`

## 介绍

在物品属性展示时，经常需要根据某些条件来显示或隐藏特定的内容。

在实际物品配置时，你可以让某些属性（lore）只有在特定条件满足时才显示，否则自动隐藏。

这一能力非常适合做动态属性、特殊效果等需求，可以使用如下示例实现。

## 示例

{% stepper %}
{% step %}

### 在 `data` 部分设置条件属性

你只需用脚本表达式为属性赋值，内容根据条件判断。\
例如，玩家等级达到100才显示特殊效果：

```yaml
data:
  special_effect: 'player.level >= 100 ? "额外伤害: +50" : ""'
```

{% endstep %}

{% step %}

### 在 `display.lore` 部分引用变量

直接用 `${变量名}` 插入上一步设置的属性。\
如果结果是空字符串，该行会自动隐藏，无需手动处理：

```yaml
display:
  lore:
    - "基础属性：${lores}"
    - "${special_effect}"
```

{% endstep %}

{% step %}

### 组合多种条件

你可以设置多个条件属性，比如品质、特殊效果、随机属性等，都可根据不同判断灵活显示：

```yaml
data:
  quality: 'when(
    player.level >= 100, "传说",
    player.level >= 50,  "史诗",
    "普通"
  )'
  special_effect: 'player.level >= 100 ? "额外伤害: +50" : ""'
  lores:
    - "物理攻击: " + random.int(100, 200)
    - "暴击率: " + random.int(10, 20)
```

在展示时全部引用即可：

```yaml
display:
  name: "&6动态属性武器"
  lore:
    - "品质：${quality}"
    - "${lores}"
    - "${special_effect}"
```

{% endstep %}

{% step %}

### 用 `computed` 实时计算属性显影

除了直接用表达式赋值，你还可以在 `computed` 部分，基于已有变量动态生成属性，实现实时条件显隐。

在 `data` 中先定义原始变量，比如等级：

```yaml
data:
  level: 0   # 可以通过外部事件/动作改变
```

`computed` 可以访问 `data` 里的变量，做实时判断：

```yaml
computed:
  special_effect: 'level >= 100 ? "额外伤害: +50" : ""'
```

展示时和前面一样，只需引用 `${special_effect}`，不满足条件时会自动隐藏：

```yaml
display:
  lore:
    - "等级：${level}"
    - "${special_effect}"
```

示例完整配置：

```yaml
data:
  level: 65
 
computed:
  special_effect: 'level >= 100 ? "额外伤害: +50" : ""'
 
display:
  name: "&a条件计算武器"
  lore:
    - "等级：${level}"
    - "${special_effect}"
```

* 当 level 小于100时，special\_effect 为空行自动隐藏；
* 当 level 达到100或更高时，自动显示“额外伤害: +50”。

`computed` 支持引用多个变量和复杂表达式，适合做多条件判断和属性联动。
{% endstep %}
{% endstepper %}

## 效果说明

* 满足条件时，属性自动显示。例如，等级足够则出现“额外伤害”。
* 条件不满足时，相关内容自动隐藏，不留空行。
* 属性列表可根据需求自动展开。

## 总结

只要你在 `data` 里用表达式设置属性值，并在 `display.lore` 里用 `${变量}`引用，条件渲染就能自动完成。这样可以让物品的属性展示更加智能、个性化，无需手动隐藏空行或重复配置。
