物品生成事件工作类 (Event_ItemGenerater)

功能说明

Event_ItemGenerater 是一个用于在游戏世界中生成物品的事件工作类。它允许您指定要生成的物品类型及其精确的生成位置。这对于实现诸如掉落物品、奖励物品、场景互动生成物品等功能非常有用。

该事件工作类通过 EventDef 中的 workClass 字段引用,其具体的行为由 parameter 字段中提供的 JSON 配置来控制。

可用参数

Event_ItemGenerater 通过解析 EventDefparameter 字段里的 JSON 配置来工作。此 JSON 配置对应 ItemSpawnData 数据结构。

ItemSpawnData 字段列表
JSON参数名XML参数名 (N/A)类型默认值说明
itemDefNameN/A字符串必需。要生成的物品的定义名称 (ItemDefdefName)。例如:"IRON_SWORD"。
positionN/AVector3null可选。物品生成的绝对世界坐标。如果提供了此字段,将优先使用此位置。
relativeOffsetN/AVector3null可选。物品相对于事件触发者 (initiator) 的偏移坐标。仅当 initiator 存在且 position 未设置时生效。

示例

以下是 EventDef 的示例,展示了 Event_ItemGenerater 的不同用法:

<Define>
    <!-- 假设已有 ItemDef: WoodenSword, HealthPotion -->

    <!-- 示例1: 在玩家击败怪物后掉落一个木剑 (相对坐标) -->
    <EventDef>
        <defName>DropWoodenSwordOnDefeat</defName>
        <label>掉落木剑</label>
        <description>在怪物死亡位置附近掉落一把木剑。</description>
        <workClass>Event_ItemGenerater</workClass>
        <parameter>
        {
            "itemDefName": "WoodenSword",
            "relativeOffset": {"x": 0.5, "y": 0.0, "z": 0.0}
        }
        </parameter>
    </EventDef>

    <!-- 示例2: 在地图的固定坐标生成一个生命药水 -->
    <EventDef>
        <defName>SpawnHealthPotionAtLocation</defName>
        <label>生成生命药水</label>
        <description>在地图的特定区域生成一个生命药水。</description>
        <workClass>Event_ItemGenerater</workClass>
        <parameter>
        {
            "itemDefName": "HealthPotion",
            "position": {"x": 10.0, "y": 5.0, "z": 0.0}
        }
        </parameter>
    </EventDef>

    <!-- 示例3: 在没有任何指定位置的情况下,直接在触发者实体上生成一个物品 (使用触发者位置) -->
    <EventDef>
        <defName>SpawnKeyOnInitiator</defName>
        <label>生成钥匙</label>
        <description>在触发表格的实体所在位置生成一把钥匙。</description>
        <workClass>Event_ItemGenerater</workClass>
        <parameter>
        {
            "itemDefName": "Key_Dungeon"
        }
        </parameter>
    </EventDef>

</Define>

复杂参数说明

parameter 字段 (JSON配置)
  • 说明EventDef 中的 parameter 字段是一个特别说明,它不使用标准的XML元素赋值方式,而是直接作为文本内容包含一个JSON格式的字符串。这个JSON字符串包含了 ItemSpawnData 的所有配置参数,用于指导 Event_ItemGenerater 的具体行为。您需要确保提供的JSON字符串是语法正确的,并且其内容符合 ItemSpawnData 的结构。
  • JSON属性与C#映射关系
    • 所有JSON属性名(如 itemDefName, position 等)与C#内部数据类 ItemSpawnData 中的对应属性名一致(JSON通常使用驼峰式命名)。
位置 (position, relativeOffset) 逻辑

物品的生成位置遵循以下优先级和逻辑:

  1. 绝对位置 (position):如果 position 字段被设定,则物品将精确地生成在该世界坐标。这是定位的最高优先级。
  2. 相对偏移 (relativeOffset):如果 position 未设置,但 relativeOffset 字段被设定,并且事件有一个 initiator (触发者实体),则物品将生成在 initiator 的位置加上 relativeOffset
  3. 触发者位置:如果 positionrelativeOffset 都未设置,但事件有一个 initiator,则物品将生成在 initiator 的当前位置。
  4. 错误处理:如果上述所有条件均不满足(即未提供 position,没有 relativeOffset 或没有 initiator),则物品生成会失败并抛出异常,因为系统无法确定一个有效的生成位置。
Vector3 的JSON表示
  • 在JSON中,Vector3 类型的字段(如 positionrelativeOffset)需要以一个包含 x, y, z 三个浮点数字段的JSON对象形式表示。
  • 例如:"position": { "x": 10.0, "y": 5.0, "z": 0.0 }