public static void TakeMailItemRequest(IRealmClient client, RealmPacketIn packet) { int num1 = packet.ReadInt32(); if (!client.ActiveCharacter.MailMessages.ContainsKey((long)num1)) { client.ActiveCharacter.YouAreFuckingCheater("Try to take not existing mail message.", 50); Asda2MailHandler.SendMailItemTakedResponse(client, Asda2MailItemTakedStatus.WrongInfo, (Asda2Item)null); } else { Asda2MailMessage mailMessage = client.ActiveCharacter.MailMessages[(long)num1]; if (mailMessage == null) { Asda2MailHandler.SendMailItemTakedResponse(client, Asda2MailItemTakedStatus.WrongInfo, (Asda2Item)null); } else { Asda2Item itemToCopyStats = mailMessage.Item; Asda2Item asda2Item = (Asda2Item)null; if (itemToCopyStats != null) { int num2 = (int)client.ActiveCharacter.Asda2Inventory.TryAdd(itemToCopyStats.ItemId, itemToCopyStats.Amount, true, ref asda2Item, new Asda2InventoryType?(), itemToCopyStats); Log.Create(Log.Types.ItemOperations, LogSourceType.Character, client.ActiveCharacter.EntryId) .AddAttribute("source", 0.0, "taked_from_mail") .AddAttribute("message_id", (double)mailMessage.Guid, "").AddItemAttributes(asda2Item, "") .Write(); mailMessage.ItemGuid = 0L; mailMessage.Item = (Asda2Item)null; itemToCopyStats.Destroy(); } client.ActiveCharacter.AddMoney(mailMessage.Gold); mailMessage.Gold = 0U; mailMessage.UpdateLater(); Asda2MailHandler.SendMailItemTakedResponse(client, Asda2MailItemTakedStatus.Ok, asda2Item); client.ActiveCharacter.SendMoneyUpdate(); } } }
public void BuyItems(Character activeCharacter, List <Asda2ItemTradeRef> itemsToBuyRefs) { Owner.Map.AddMessage(() => { List <Asda2ItemTradeRef> source = new List <Asda2ItemTradeRef>(); foreach (Asda2ItemTradeRef itemsToBuyRef in itemsToBuyRefs) { Asda2ItemTradeRef asda2ItemTradeRef = ItemsOnTrade[itemsToBuyRef.TradeSlot]; if (asda2ItemTradeRef == null || asda2ItemTradeRef.Amount == -1 || asda2ItemTradeRef.Amount != 0 && asda2ItemTradeRef.Amount < itemsToBuyRef.Amount) { Asda2PrivateShopHandler.SendItemBuyedFromPrivateShopResponse(activeCharacter, PrivateShopBuyResult.RequestedNumberOfItemsIsNoLongerAvaliable, null); return; } source.Add(new Asda2ItemTradeRef { Amount = itemsToBuyRef.Amount, Item = asda2ItemTradeRef.Item, Price = asda2ItemTradeRef.Price, TradeSlot = asda2ItemTradeRef.TradeSlot }); } ulong num1 = source.Aggregate(0UL, (current, asda2ItemTradeRef) => current + (ulong)(asda2ItemTradeRef.Price * asda2ItemTradeRef.Amount)); if (num1 > int.MaxValue) { activeCharacter.YouAreFuckingCheater("Trying to buy items with wrong money amount.", 50); Asda2PrivateShopHandler.SendItemBuyedFromPrivateShopResponse(activeCharacter, PrivateShopBuyResult.NotEnoghtGold, null); } else if (activeCharacter.Money < num1) { Asda2PrivateShopHandler.SendItemBuyedFromPrivateShopResponse(activeCharacter, PrivateShopBuyResult.NotEnoghtGold, null); } else if (Owner.Money + num1 > int.MaxValue) { Asda2PrivateShopHandler.SendItemBuyedFromPrivateShopResponse(activeCharacter, PrivateShopBuyResult.Error, null); SendMessage(Owner.Name + " has to much gold.", Owner, Locale.Start); } else if (source.Any(asda2ItemTradeRef => { if (asda2ItemTradeRef.Item == null || asda2ItemTradeRef.Item.IsDeleted) { return(true); } if (asda2ItemTradeRef.Item.Amount != 0) { return(asda2ItemTradeRef.Item.Amount < asda2ItemTradeRef.Amount); } return(false); })) { Owner.YouAreFuckingCheater("Trying to cheat while trading items from private shop", 10); Exit(Owner); } else if (activeCharacter.Asda2Inventory.FreeRegularSlotsCount < source.Count(i => i.Item.InventoryType == Asda2InventoryType.Regular) || activeCharacter.Asda2Inventory.FreeShopSlotsCount < source.Count( i => i.Item.InventoryType == Asda2InventoryType.Shop)) { Asda2PrivateShopHandler.SendItemBuyedFromPrivateShopResponse(activeCharacter, PrivateShopBuyResult.NoSlotAreAvailable, null); } else { activeCharacter.SubtractMoney((uint)num1); Owner.AddMoney((uint)num1); List <Asda2Item> buyedItems = new List <Asda2Item>(); List <Asda2ItemTradeRef> itemsBuyed = new List <Asda2ItemTradeRef>(); foreach (Asda2ItemTradeRef asda2ItemTradeRef1 in source) { if (asda2ItemTradeRef1.Amount == 0) { asda2ItemTradeRef1.Amount = 1; } if (asda2ItemTradeRef1.Amount >= asda2ItemTradeRef1.Item.Amount) { LogHelperEntry lgDelete = Log .Create(Log.Types.ItemOperations, LogSourceType.Character, Owner.EntryId) .AddAttribute("source", 0.0, "selled_from_private_shop") .AddItemAttributes(asda2ItemTradeRef1.Item, "") .AddAttribute("buyer_id", activeCharacter.EntryId, "") .AddAttribute("amount", asda2ItemTradeRef1.Amount, "").Write(); Asda2Item itemToCopyStats = asda2ItemTradeRef1.Item; Asda2Item asda2Item = null; int num2 = (int)activeCharacter.Asda2Inventory.TryAdd(itemToCopyStats.ItemId, itemToCopyStats.Amount, true, ref asda2Item, new Asda2InventoryType?(), itemToCopyStats); Log.Create(Log.Types.ItemOperations, LogSourceType.Character, activeCharacter.EntryId) .AddAttribute("source", 0.0, "buyed_from_private_shop").AddItemAttributes(asda2Item, "") .AddAttribute("seller_id", Owner.EntryId, "").AddReference(lgDelete) .AddAttribute("amount", asda2ItemTradeRef1.Amount, "").Write(); buyedItems.Add(asda2Item); itemToCopyStats.Destroy(); ItemsOnTrade[asda2ItemTradeRef1.TradeSlot].Amount = -1; ItemsOnTrade[asda2ItemTradeRef1.TradeSlot].Price = 0; } else { LogHelperEntry lgDelete = Log .Create(Log.Types.ItemOperations, LogSourceType.Character, Owner.EntryId) .AddAttribute("source", 0.0, "selled_from_private_shop_split") .AddItemAttributes(asda2ItemTradeRef1.Item, "") .AddAttribute("buyer_id", activeCharacter.EntryId, "") .AddAttribute("amount", asda2ItemTradeRef1.Amount, "").Write(); asda2ItemTradeRef1.Item.Amount -= asda2ItemTradeRef1.Amount; Asda2Item asda2Item = null; int num2 = (int)activeCharacter.Asda2Inventory.TryAdd( (int)asda2ItemTradeRef1.Item.Template.ItemId, asda2ItemTradeRef1.Amount, true, ref asda2Item, new Asda2InventoryType?(), asda2ItemTradeRef1.Item); Log.Create(Log.Types.ItemOperations, LogSourceType.Character, activeCharacter.EntryId) .AddAttribute("source", 0.0, "buyed_from_private_shop_split") .AddItemAttributes(asda2Item, "new_item") .AddItemAttributes(asda2ItemTradeRef1.Item, "old_item") .AddAttribute("amount", asda2ItemTradeRef1.Amount, "") .AddAttribute("seller_id", Owner.EntryId, "").AddReference(lgDelete) .Write(); asda2ItemTradeRef1.Item.Save(); buyedItems.Add(asda2Item); } Asda2ItemTradeRef asda2ItemTradeRef2 = ItemsOnTrade[asda2ItemTradeRef1.TradeSlot]; itemsBuyed.Add(asda2ItemTradeRef2); if (asda2ItemTradeRef2 != null && asda2ItemTradeRef2.Amount > 0) { asda2ItemTradeRef2.Amount -= asda2ItemTradeRef1.Amount; if (asda2ItemTradeRef2.Amount <= 0) { asda2ItemTradeRef2.Amount = -1; } } } Asda2PrivateShopHandler.SendItemBuyedFromPrivateShopResponse(activeCharacter, PrivateShopBuyResult.Ok, buyedItems); Asda2PrivateShopHandler.SendItemBuyedFromPrivateShopToOwnerNotifyResponse(this, itemsBuyed, activeCharacter); Asda2PrivateShopHandler.SendPrivateShopChatNotificationAboutBuyResponse(this, itemsBuyed, activeCharacter); Owner.SendMoneyUpdate(); activeCharacter.SendMoneyUpdate(); } }); }
private static void ProcessFunctionalItem(IRealmClient client, uint parametr, short slot) { Asda2Item item = client.ActiveCharacter.Asda2Inventory.GetShopShopItem(slot); if (item == null) { FunctionalItemsHandler.SendUpdateShopItemInfoResponse(client, UseFunctionalItemError.FunctionalItemDoesNotExist, (Asda2Item)null); } else { UseFunctionalItemError status = UseFunctionalItemError.Ok; if ((int)item.RequiredLevel > client.ActiveCharacter.Level) { FunctionalItemsHandler.SendUpdateShopItemInfoResponse(client, UseFunctionalItemError.YorLevelIsNotHightEnoght, item); } else { ServerApp <WCell.RealmServer.RealmServer> .IOQueue.AddMessage((Action)(() => { try { switch (item.Category) { case Asda2ItemCategory.IncPAtk: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMAtk: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncPDef: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMdef: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncHp: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMp: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncStr: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncSta: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncInt: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncSpi: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncDex: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncLuck: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncMoveSpeed: if (client.ActiveCharacter.LastTransportUsedTime + TimeSpan.FromMilliseconds(30000.0) > DateTime.Now) { status = UseFunctionalItemError.CoolingTimeRemain; break; } if (item.Record.IsSoulBound && item.Record.AuctionEndTime != DateTime.MinValue && DateTime.Now > item.Record.AuctionEndTime) { Asda2InventoryHandler.ItemRemovedFromInventoryResponse(client.ActiveCharacter, item, DeleteOrSellItemStatus.Ok, 0); item.Destroy(); client.ActiveCharacter.SendInfoMsg("Vehicle expired."); status = UseFunctionalItemError.TheDurationOfTheShopitemHaExprised; break; } if (item.Record.AuctionEndTime == DateTime.MinValue) { item.Record.AuctionEndTime = DateTime.Now + TimeSpan.FromDays((double)item.AttackTime); } client.ActiveCharacter.LastTransportUsedTime = DateTime.Now; item.IsSoulbound = true; client.ActiveCharacter.TransportItemId = item.ItemId; AchievementProgressRecord progressRecord1 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(85U); switch (++progressRecord1.Counter) { case 1: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Rapid219))); break; case 1000: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Rapid219))); break; } progressRecord1.SaveAndFlush(); break; case Asda2ItemCategory.IncExp: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncDropChance: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncDigChance: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncExpStackable: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.IncAtackSpeed: client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, false); FunctionalItemsHandler.SendShopItemUsedResponse(client, item.ItemId, (int)item.Template.AtackRange); break; case Asda2ItemCategory.ExpandWarehouse: if (client.ActiveCharacter.Record.PremiumWarehouseBagsCount >= (byte)8) { status = UseFunctionalItemError.WarehouseHasReachedMaxCapacity; break; } ++client.ActiveCharacter.Record.PremiumWarehouseBagsCount; FunctionalItemsHandler.SendWarehouseSlotsExpandedResponse(client, false); break; case Asda2ItemCategory.ResetAllSkill: FunctionalItemsHandler.ResetSkills(client.ActiveCharacter); Asda2CharacterHandler.SendLearnedSkillsInfo(client.ActiveCharacter); AchievementProgressRecord progressRecord2 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(84U); switch (++progressRecord2.Counter) { case 3: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId .Perfectionist218))); break; case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Perfectionist218))); break; } progressRecord2.SaveAndFlush(); break; case Asda2ItemCategory.ResetOneSkill: Spell spell1 = client.ActiveCharacter.Spells.First <Spell>( (Func <Spell, bool>)(s => (long)s.RealId == (long)parametr)); if (spell1 != null) { int num1 = 0 + spell1.Cost; for (int index = spell1.Level - 1; index > 0; --index) { Spell spell2 = SpellHandler.Get((uint)spell1.RealId + (uint)(index * 1000)); if (spell2 != null) { num1 += spell2.Cost; } } uint num2 = (uint)(num1 / 2); client.ActiveCharacter.Spells.Remove(spell1); client.ActiveCharacter.AddMoney(num2); Asda2CharacterHandler.SendPreResurectResponse(client.ActiveCharacter); FunctionalItemsHandler.SendSkillResetedResponse(client, spell1.RealId, (short)spell1.Level, num2); Asda2CharacterHandler.SendUpdateStatsOneResponse(client); Asda2CharacterHandler.SendUpdateStatsResponse(client); client.ActiveCharacter.SendMoneyUpdate(); AchievementProgressRecord progressRecord3 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(84U); switch (++progressRecord3.Counter) { case 3: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId .Perfectionist218))); break; case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId .Perfectionist218))); break; } progressRecord3.SaveAndFlush(); break; } status = UseFunctionalItemError.FailedToUse; client.ActiveCharacter.SendInfoMsg("Skill is not learned. Restart client."); break; case Asda2ItemCategory.TeleportToCharacter: if (parametr >= 10U || client.ActiveCharacter.TeleportPoints[parametr] == null) { status = UseFunctionalItemError.FailedToUse; break; } Asda2TeleportingPointRecord teleportPoint = client.ActiveCharacter.TeleportPoints[parametr]; client.ActiveCharacter.TeleportTo(teleportPoint.MapId, new Vector3((float)teleportPoint.X, (float)teleportPoint.Y)); AchievementProgressRecord progressRecord4 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(89U); switch (++progressRecord4.Counter) { case 50: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Traveler223))); break; case 100: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Traveler223))); break; } progressRecord4.SaveAndFlush(); break; case Asda2ItemCategory.InstantRecover100PrcHP: if (client.ActiveCharacter.Last100PrcRecoveryUsed + 30000U > (uint)Environment.TickCount) { status = UseFunctionalItemError.CoolingTimeRemain; break; } client.ActiveCharacter.Last100PrcRecoveryUsed = (uint)Environment.TickCount; client.ActiveCharacter.HealPercent(100, (Unit)null, (SpellEffect)null); break; case Asda2ItemCategory.InstantRecover100PrcHPandMP: if (client.ActiveCharacter.Last100PrcRecoveryUsed + 30000U < (uint)Environment.TickCount) { status = UseFunctionalItemError.CoolingTimeRemain; } client.ActiveCharacter.HealPercent(100, (Unit)null, (SpellEffect)null); client.ActiveCharacter.Power = client.ActiveCharacter.MaxPower; client.ActiveCharacter.Last100PrcRecoveryUsed = (uint)Environment.TickCount; break; case Asda2ItemCategory.RecoverHp10TimesByPrcOver30Sec: PereodicAction pereodicAction = (PereodicAction)null; if (client.ActiveCharacter.PereodicActions.ContainsKey(Asda2PereodicActionType .HpRegenPrc)) { pereodicAction = client.ActiveCharacter.PereodicActions[Asda2PereodicActionType.HpRegenPrc]; } if (pereodicAction != null && pereodicAction.CallsNum >= 10 && pereodicAction.Value >= item.Template.ValueOnUse) { status = UseFunctionalItemError.CoolingTimeRemain; break; } if (client.ActiveCharacter.PereodicActions.ContainsKey(Asda2PereodicActionType .HpRegenPrc)) { client.ActiveCharacter.PereodicActions.Remove( Asda2PereodicActionType.HpRegenPrc); } client.ActiveCharacter.PereodicActions.Add(Asda2PereodicActionType.HpRegenPrc, new PereodicAction(client.ActiveCharacter, item.Template.ValueOnUse, 10, 3000, Asda2PereodicActionType.HpRegenPrc)); break; case Asda2ItemCategory.ShopBanner: if (client.ActiveCharacter.Level < 10) { status = UseFunctionalItemError.YorLevelIsNotHightEnoght; break; } FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); break; case Asda2ItemCategory.OpenWarehouse: break; case Asda2ItemCategory.PremiumPotions: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); client.ActiveCharacter.Asda2WingsItemId = (short)item.ItemId; AchievementProgressRecord progressRecord5 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(86U); switch (++progressRecord5.Counter) { case 50: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Winged220))); break; case 100: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Winged220))); break; } progressRecord5.SaveAndFlush(); break; case Asda2ItemCategory.ExpandInventory: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); AchievementProgressRecord progressRecord6 = client.ActiveCharacter.Achievements.GetOrCreateProgressRecord(87U); switch (++progressRecord6.Counter) { case 3: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.DiscoverTitle(Asda2TitleId.Packrat221))); break; case 5: client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Packrat221))); break; } progressRecord6.SaveAndFlush(); break; case Asda2ItemCategory.PetNotEatingByDays: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); client.ActiveCharacter.Map.CallDelayed(500, (Action)(() => client.ActiveCharacter.GetTitle(Asda2TitleId.Treat366))); break; case Asda2ItemCategory.RemoveDeathPenaltiesByDays: FunctionalItemsHandler.SendPremiumLongBuffInfoResponse(client, (byte)client.ActiveCharacter.ApplyFunctionItemBuff(item.ItemId, true), item.ItemId, (short)item.Template.PackageId); break; default: status = UseFunctionalItemError.NotAunctionalItem; break; } } catch (AlreadyBuffedExcepton ex) { status = UseFunctionalItemError.AlreadyFeelingTheEffectOfSimilarSkillType; } if (status == UseFunctionalItemError.Ok && item.Category != Asda2ItemCategory.IncMoveSpeed) { item.ModAmount(-1); } FunctionalItemsHandler.SendUpdateShopItemInfoResponse(client, status, item); })); } } }