using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Amazon.S3.Model; using ServerCore; using ServerBase; using ServerCommon; namespace GameServer { public class UserInventoryAction : InventoryActionBase { public UserInventoryAction(Player owner) : base(owner) { } public override async Task onInit() { await Task.CompletedTask; var result = new Result(); var owner = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!"); result = await getBagInven().onInit(); if (result.isFail()) { return result; } getEquipInvens().TryAdd(InvenEquipType.Tool, new ToolEquipInven(owner)); getEquipInvens().TryAdd(InvenEquipType.Cloth, new ClothEquipInven(owner)); getEquipInvens().TryAdd(InvenEquipType.Tattoo, new TattooEquipInven(owner)); var equip_inven_initializers = new Initializers(); foreach (var each in getEquipInvens()) { equip_inven_initializers.appendInitializer(each.Value as IInitializer); } result = await equip_inven_initializers.init("User EquipInvens"); if (result.isFail()) { return result; } return result; } public override void onClear() { var player = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); // 삭제할 가방 인벤토리내의 아이템 목록을 초기화 한다. var bag_inven = getBagInven(); NullReferenceCheckHelper.throwIfNull(bag_inven, () => $"bag_inven is null !!! - {player.toBasicString()}"); bag_inven.clearItemAll(); // 가방 인벤토리내의 Tab별 개수 정보 초기화 한다. bag_inven.resetItemCountInTabs(); // 삭제할 장착 인벤토리내의 아이템 목록을 초기화 한다. var to_clear_equip_invens = new List() { InvenEquipType.Tool , InvenEquipType.Cloth , InvenEquipType.Tattoo }; foreach(var inven_equip_type in to_clear_equip_invens) { if (true == getEquipInvens().TryGetValue(inven_equip_type, out var found_equip_inven)) { var tool_equip_inven = found_equip_inven as IWithInventoryAccessor; NullReferenceCheckHelper.throwIfNull(tool_equip_inven, () => $"tool_equip_inven is null !!! - {player.toBasicString()}"); tool_equip_inven.clearItemAll(); } } // 능력치 속성 정보들도 초기화 한다. var ability_action = player.getEntityAction(); NullReferenceCheckHelper.throwIfNull(ability_action, () => $"ability_action is null !!! - {player.toBasicString()}"); ability_action.clearAbility(); } public override Item onAllocItem() { var player = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); return new UserItem(player); } } }