public override IEnumerable <object> Run() { GuildStorageManager storage = base.Entity.Storage; OnlineGuildMember member = base.Entity.GetOnlineMember(base.Operation.RequestingCID); if (!base.Entity.Storage.Valid || !FeatureMatrix.IsEnable("GuildStorage")) { member.SendOperationFailedDialog("GuildStorageFail_Processing"); storage.AddGuildStorageLedger(base.Operation.RequestingCID, GuildStorageOperationCode.ArrangeGuildItem, GuildStorageEventCode.Error_Invalid); base.Finished = true; yield return(new FailMessage("[ArrangeGuildStorageItemProcessor] GuildStorage") { Reason = FailMessage.ReasonCode.LogicalFail }); } else if (base.Entity.Storage.Processing) { member.SendOperationFailedDialog("GuildStorageFail_Processing"); storage.AddGuildStorageLedger(base.Operation.RequestingCID, GuildStorageOperationCode.ArrangeGuildItem, GuildStorageEventCode.Error_Processing); base.Finished = true; yield return(new FailMessage("[ArrangeGuildStorageItemProcessor] Entity.Storage.Processing") { Reason = FailMessage.ReasonCode.LogicalFail }); } else if (!base.Entity.Storage.IsEnabled) { member.SendOperationFailedDialog("GuildStorageFail_Stopped"); storage.AddGuildStorageLedger(base.Operation.RequestingCID, GuildStorageOperationCode.ArrangeGuildItem, GuildStorageEventCode.Error_Invalid); base.Finished = true; yield return(new FailMessage("[ArrangeGuildStorageItemProcessor] Entity.Storage.IsEnabled") { Reason = FailMessage.ReasonCode.LogicalFail }); } else { base.Entity.Storage.Processing = true; QueryItemInfoByItemID op0 = new QueryItemInfoByItemID { ItemID = base.Operation.ItemID }; OperationSync sync0 = new OperationSync { Connection = base.Entity.Storage.ItemConn, Operation = op0 }; yield return(sync0); if (op0.Result) { if (op0.SlotInfo.ItemClass == "gold") { member.SendOperationFailedDialog("GuildStorageFail_InvalidItem"); base.Entity.Storage.Processing = false; base.Finished = true; yield return(new FailMessage("[ArrangeGuildStorageItemProcessor] op0.SlotInfo.ItemClass") { Reason = FailMessage.ReasonCode.LogicalFail }); } else if (base.Entity.Storage.IsPickLimited(member, op0.SlotInfo.ItemClass, op0.SlotInfo.Slot, 1) || base.Entity.Storage.IsPickLimited(member, "", base.Operation.Slot, 1)) { base.Entity.Storage.Processing = false; base.Finished = true; yield return(new FailMessage("[ArrangeGuildStorageItemProcessor] Entity.Storage.IsPickLimited") { Reason = FailMessage.ReasonCode.LogicalFail }); } else { storage.AddGuildStorageLedger(base.Operation.RequestingCID, GuildStorageOperationCode.ArrangeGuildItem, GuildStorageEventCode.Process, base.Operation.ItemID.ToString(), base.Operation.Slot); MoveInventoryItem op = new MoveInventoryItem(base.Operation.ItemID, 0, base.Operation.Slot); OperationSync sync = new OperationSync { Connection = base.Entity.Storage.ItemConn, Operation = op }; yield return(sync); if (sync.Result && op.Result) { storage.AddGuildStorageLedger(base.Operation.RequestingCID, GuildStorageOperationCode.ArrangeGuildItem, GuildStorageEventCode.Done, base.Operation.ItemID.ToString(), base.Operation.Slot); } else { storage.AddGuildStorageLedger(base.Operation.RequestingCID, GuildStorageOperationCode.ArrangeGuildItem, GuildStorageEventCode.Error_TransferFail, base.Operation.ItemID.ToString(), base.Operation.Slot); member.SendOperationFailedDialog("GuildStorageFail_TransferFailed"); } base.Entity.Storage.Processing = false; base.Finished = true; yield return(new OkMessage()); } } else { member.SendOperationFailedDialog("GuildStorageFail_InternalError"); base.Entity.Storage.Processing = false; base.Finished = true; yield return(new FailMessage("[ArrangeGuildStorageItemProcessor] op0.Result") { Reason = FailMessage.ReasonCode.LogicalFail }); } } yield break; }
public override IEnumerable <object> Run() { GuildStorageManager storage = this.Entity.Storage; OnlineGuildMember member = this.Entity.GetOnlineMember(this.Operation.OwnerCID); if (!this.Entity.Storage.Valid || !FeatureMatrix.IsEnable("GuildStorage")) { member.SendOperationFailedDialog("GuildStorageFail_Processing"); storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_Invalid); this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] GuildStorage") { Reason = FailMessage.ReasonCode.LogicalFail }); } else if (this.Entity.Storage.Processing) { member.SendOperationFailedDialog("GuildStorageFail_Processing"); storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_Processing); this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] Entity.Storage.Processing") { Reason = FailMessage.ReasonCode.LogicalFail }); } else if (this.Entity.Storage.StorageCount == 0) { member.SendOperationFailedDialog("GuildStorageFail_NoSlot"); storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.AddGuildItem, GuildStorageEventCode.Error_Invalid); this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] Entity.Storage.StorageCount") { Reason = FailMessage.ReasonCode.LogicalFail }); } else { this.Entity.Storage.Processing = true; int color1 = -1; int color2 = -1; int color3 = -1; int reduceDurability = -1; int maxDurabilityBonus = -1; byte tab = byte.MaxValue; int slot = -2; string loggingItemClass = this.Operation.ItemClass; if (this.Operation.ItemID != 0L) { QueryItemInfoByItemID op0 = new QueryItemInfoByItemID() { ItemID = this.Operation.ItemID }; OperationSync sync0 = new OperationSync() { Connection = this.Entity.Storage.ItemConn, Operation = (Operation)op0 }; yield return((object)sync0); if (op0.Result) { if (this.Entity.Storage.IsPickLimited(member, this.Operation.ItemClass, op0.SlotInfo.Slot, this.Operation.Amount)) { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_Limited, this.Operation.ItemClass, this.Operation.Amount); this.Entity.Storage.Processing = false; this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] Entity.Storage.IsPickLimited") { Reason = FailMessage.ReasonCode.LogicalFail }); yield break; } else { color1 = op0.SlotInfo.Color1; color2 = op0.SlotInfo.Color2; color3 = op0.SlotInfo.Color3; reduceDurability = op0.SlotInfo.MaxDurability - op0.SlotInfo.Durability; maxDurabilityBonus = op0.SlotInfo.MaxDurabilityBonus; tab = (byte)op0.SlotInfo.Tab; slot = op0.SlotInfo.Slot; loggingItemClass = op0.ItemClassEX; } } else { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_Invalid, this.Operation.ItemClass, this.Operation.Amount); member.SendOperationFailedDialog("GuildStorageFail_InternalError"); this.Entity.Storage.Processing = false; this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] op0.Result") { Reason = FailMessage.ReasonCode.LogicalFail }); yield break; } } else if (this.Entity.Storage.IsPickLimited(member, this.Operation.ItemClass, 0, this.Operation.Amount)) { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_Invalid, this.Operation.ItemClass, this.Operation.Amount); this.Entity.Storage.Processing = false; this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] Entity.Storage.IsPickLimited") { Reason = FailMessage.ReasonCode.LogicalFail }); yield break; } storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.TransferFrom, this.Operation.ItemClass, this.Operation.Amount, color1, color2, color3, reduceDurability, maxDurabilityBonus); TransferToSystem op1 = new TransferToSystem((ICollection <TransferItemInfo>) new List <TransferItemInfo>() { new TransferItemInfo(this.Operation.ItemID, this.Operation.ItemClass, this.Operation.Amount) }, TransferToSystem.SourceEnum.GuildStorage); OperationSync sync = new OperationSync() { Connection = this.Entity.Storage.ItemConn, Operation = (Operation)op1 }; yield return((object)sync); if (!op1.Result) { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_TransferFail, this.Operation.ItemClass, this.Operation.Amount, color1, color2, color3, reduceDurability, maxDurabilityBonus); member.SendOperationFailedDialog("GuildStorageFail_TransferFailed"); this.Entity.Storage.Processing = false; this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] op1.Result") { Reason = FailMessage.ReasonCode.LogicalFail }); } else { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.TransferTo, this.Operation.ItemClass, this.Operation.Amount, color1, color2, color3, reduceDurability, maxDurabilityBonus); List <long> itemList = new List <long>(); foreach (TransferredItemInfo transferredItem in (IEnumerable <TransferredItemInfo>)op1.TransferredItemList) { itemList.Add(transferredItem.ItemID); } TransferFromSystem op2 = (int)this.Operation.TargetTab != (int)byte.MaxValue ? (this.Operation.TargetSlot != -1 ? new TransferFromSystem((ICollection <long>)itemList, true, this.Operation.TargetTab, this.Operation.TargetSlot, this.Operation.TargetSlot + 1, TransferFromSystem.SourceEnum.GuildStorage) : new TransferFromSystem((ICollection <long>)itemList, true, this.Operation.TargetTab, 0, 48, TransferFromSystem.SourceEnum.GuildStorage)) : new TransferFromSystem((ICollection <long>)itemList, true, byte.MaxValue, 0, 0, TransferFromSystem.SourceEnum.GuildStorage); OperationSync sync2 = new OperationSync() { Connection = member.PlayerConn, Operation = (Operation)op2 }; yield return((object)sync2); if (!op2.Result) { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_TransferFail, this.Operation.ItemClass, this.Operation.Amount, color1, color2, color3, reduceDurability, maxDurabilityBonus); if (op2.FailReason == TransferFromSystem.FailReasonEnum.NoEmptySlot) { member.SendOperationFailedDialog("GuildStorageFail_NoEmptySlot"); } else { member.SendOperationFailedDialog("GuildStorageFail_TransferFailed"); } TransferFromSystem op3 = new TransferFromSystem((ICollection <long>)itemList, false, tab, slot, slot + 1, TransferFromSystem.SourceEnum.GuildStorage); OperationSync sync3 = new OperationSync() { Connection = this.Entity.Storage.ItemConn, Operation = (Operation)op3 }; yield return((object)sync3); if (op3.Result) { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_TransferFail_Recovered, this.Operation.ItemClass, this.Operation.Amount, color1, color2, color3, reduceDurability, maxDurabilityBonus); } else { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Error_TransferFail_RecoverFail, this.Operation.ItemClass, this.Operation.Amount, color1, color2, color3, reduceDurability, maxDurabilityBonus); } this.Entity.Storage.Processing = false; this.Finished = true; yield return((object)new FailMessage("[PickGuildStorageItemProcessor] op2.Result") { Reason = FailMessage.ReasonCode.LogicalFail }); } else { storage.AddGuildStorageLedger(this.Operation.OwnerCID, GuildStorageOperationCode.PickGuildItem, GuildStorageEventCode.Done, this.Operation.ItemClass, this.Operation.Amount, color1, color2, color3, reduceDurability, maxDurabilityBonus); this.Entity.Storage.ReportPickItem(member.CharacterName, loggingItemClass, this.Operation.Amount, color1, color2, color3); this.Entity.Storage.Processing = false; this.Finished = true; yield return((object)new OkMessage()); } } } }