using Fantasy.Entitas.Interface; // ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract namespace Fantasy; public sealed class ContainerComponentDestroySystem : DestroySystem { protected override void Destroy(ContainerComponent self) { foreach (var (_, container) in self.Containers) { container.Dispose(); } self.Containers.Clear(); } } public sealed class ContainerComponentDeserializeSystem : DeserializeSystem { protected override void Deserialize(ContainerComponent self) { var account = self.GetParent(); foreach (var (key, container) in self.Containers) { container.Deserialize(self.Scene); container.Account = account; } } } public sealed class ContainerComponentAwakeSystem : AwakeSystem { protected override void Awake(ContainerComponent self) { var account = self.GetParent(); var unitConfig = account.UnitConfig; // 根据角色的配置文件创建容器。 foreach (var containerConfigId in unitConfig.MountContainer) { if (!ContainerConfigData.Instance.TryGet(containerConfigId, out var containerConfig)) { Log.Error($"containerConfigId : {containerConfigId} not found"); return; } ContainerHelper.Create(account, (ContainerType)containerConfig.Type); } // 创建初始化物品到容器中。 var unitConfigItems = unitConfig.Items; for (var itemArgs = 0; itemArgs < unitConfigItems.Length; itemArgs += 3) { try { var containerType = unitConfigItems[itemArgs]; var itemConfigId = unitConfigItems[itemArgs + 1]; var itemCount = (int)unitConfigItems[itemArgs + 2]; var item = ItemFactory.Create(self.Scene, itemConfigId, itemCount, true); if (item == null) { // 这里创建物品失败,可以选择跳过这个物品,继续下一个创建。 // 也可以直接停止全部的物品创建。 continue; } // 添加物品到容器中。 var addItemErrorCode = ContainerHelper.AddItem(account, (ContainerType)containerType, item, ItemReason.ContainerAdd, false); if (addItemErrorCode != 0) { Log.Error($"cant add item to container errorCode:{addItemErrorCode}"); continue; } } catch { Log.Error($"unitConfig :{unitConfig.Id} items参数不正确,要求是3个一组。"); // 你可以选择如果有一个出错了,跳过、继续下一个创建。 // 你还可以选择如果出错了,直接终止跳出。 break; } } } }