# PHY 编辑器打通清单(装备/药品/通知) > 目标:打通你当前 C++ 已实现的链路: > - 装备穿脱 -> 属性生效/回滚 > - 药品使用(Server RPC)-> 扣除库存 -> 恢复属性 > - 通知飘字(Info/Reward/Warning) ## 0. 代码前提(已实现) - `APHYCharacter` 已挂载:`InventorySystem` + `EquipmentSystem`。 - 服务器 `BeginPlay` 会初始化库存与装备系统。 - `APHYPlayerCharacter::ServerUseConsumableByItemId` 已有严格校验: - 必须是 `GIS.Item.Type.Consumable` - 找不到道具/扣除失败会发 Warning 通知 - `APHYPlayerState` 已接入 owner 通知分发(支持 DS/Listen/Standalone)。 ## 1. GameplayTags(必须先做) 请在 `Project Settings -> Gameplay Tags` 或 `Config/DefaultGameplayTags.ini` 中确认存在: ### 1.1 类型标签(必须) - `GIS.Item.Type.Weapon` - `GIS.Item.Type.Equipment` - `GIS.Item.Type.Consumable` - `GIS.Item.Type.Material` ### 1.2 药品效果标签(必须) - `GIS.Attribute.Item.Consumable.RestoreHealth` - `GIS.Attribute.Item.Consumable.RestoreInnerPower` ### 1.3 装备属性标签(建议) - `GIS.Attribute.Item.Attack` - `GIS.Attribute.Item.Defense` - `GIS.Attribute.Item.CritRate` - `GIS.Attribute.Item.CritDamage` - `GIS.Attribute.Item.Hit` - `GIS.Attribute.Item.Dodge` - `GIS.Attribute.Item.Parry` - `GIS.Attribute.Item.CounterChance` - `GIS.Attribute.Item.ArmorPenetration` - `GIS.Attribute.Item.DamageReduction` - `GIS.Attribute.Item.LifeSteal` - `GIS.Attribute.Item.Resilience` - `GIS.Attribute.Item.MoveSpeed` - `GIS.Attribute.Item.HealthRegenRate` - `GIS.Attribute.Item.InnerPowerRegenRate` - `GIS.Attribute.Item.MaxHealth` - `GIS.Attribute.Item.MaxInnerPower` ## 2. 角色蓝图组件配置 打开你的玩家角色蓝图(继承 `APHYPlayerCharacter`): 1. 选中 `InventorySystem` 组件: - 确认存在普通背包集合(如 `GIS.Collection.Inventory`) - 确认存在装备槽集合(如 `GIS.Collection.Equipped`,SlotCollection) 2. 选中 `EquipmentSystem` 组件: - `TargetCollectionTag` 设为装备槽集合标签(如 `GIS.Collection.Equipped`) > 若 `TargetCollectionTag` 不匹配,装备状态事件不会触发,属性不会生效。 ## 3. 创建三类物品(UGIS_ItemDefinition) ## 3.1 药品示例:`ID_Cons_HealthSmall` - `DisplayName`: 小还丹 - `ItemTags`: 添加 `GIS.Item.Type.Consumable` - 图标:设置 `Icon` - 动态或静态属性至少配置其一: - `GIS.Attribute.Item.Consumable.RestoreHealth = 120` - `GIS.Attribute.Item.Consumable.RestoreInnerPower = 0` ## 3.2 武器示例:`ID_Wpn_BronzeSword` - `DisplayName`: 青铜剑 - `ItemTags`: 添加 `GIS.Item.Type.Weapon` - 属性: - `GIS.Attribute.Item.Attack = 35` - `GIS.Attribute.Item.CritRate = 0.03` ## 3.3 装备示例:`ID_Equip_ClothArmor` - `DisplayName`: 布甲 - `ItemTags`: 添加 `GIS.Item.Type.Equipment` - 属性: - `GIS.Attribute.Item.Defense = 20` - `GIS.Attribute.Item.DamageReduction = 0.02` ## 4. 物品“使用”按钮绑定(UI) 在你的物品操作逻辑中(右键菜单/快捷键): 1. 从 `UItemData` 取 `ItemInfo.Item` 2. `Item->GetItemId()` 拿到 `FGuid` 3. `GetOwningPlayerPawn` -> Cast `APHYPlayerCharacter` 4. 调用:`ServerUseConsumableByItemId(ItemId, 1)` ## 5. 通知验证点 你当前 UI 会接 `OnGameplayNotifyDelegate`,预期: - 使用药品成功:`Reward`(例如:使用 小还丹 x1) - 使用非药品:`Warning` - 数量不足/扣除失败:`Warning` - 装备成功:`Info`(装备 xxx) - 卸下成功:`Info`(卸下 xxx) ## 6. 联机验收顺序(建议) 1. Standalone 2. Listen Server + 1 Client 3. Dedicated Server + 1 Client 每轮都检查: - 药品是否扣库存 - 生命/内力是否恢复 - 装备/卸下是否改变属性 - 通知是否只在拥有者客户端显示 ## 7. 常见问题 - **现象:药品点了无反应** - 常见原因:缺少 `GIS.Item.Type.Consumable` - **现象:装备后属性不变** - 常见原因:`EquipmentSystem.TargetCollectionTag` 不匹配装备集合 - **现象:Dedicated Server 下无提示** - 先确认 HUD/UI 绑定是否在客户端建立;`PlayerState` 已支持 owner 通知分发 --- 如果你需要,我可以继续生成第二份文档: - `PHY_Item_Asset_Convention.md`(命名规范 + 品质色 + 图标规范 + 掉落表字段模板)