private async Task ItemXChange(ChatInfo info, PlayerInfo player, ItemBox itemBox, bool aChange) { var exchange = new ItemExchangeInfo() { buttonText = "XChange", desc = "Erze in das Tauschfeld legen und tauschen (ESC oder Button), dann die Erze wieder herausnehmen", id = info.playerId, items = GetBoxContents(player.entityId).ToArray(), title = $@"{itemBox.fullName} XChange" }; async void eventCallback(ItemExchangeInfo B) { if (player.entityId != B.id) { return; } Event_Player_ItemExchange -= eventCallback; SetBoxContents(player.entityId, itemBox, B.items); if (aChange) { await ItemXChange(info, player, itemBox, false); } } Event_Player_ItemExchange += eventCallback; await Request_Player_ItemExchange(Timeouts.Wait10m, exchange); }
public void SetBoxContents(int playerId, ItemBox itemBox, ItemStack[] contents) { if (!currentXChange.ContainsKey(playerId)) { currentXChange.Add(playerId, new List <ItemStack>()); } var currentBox = currentXChange[playerId] = contents?.ToList() ?? new List <ItemStack>(); Log($"**HandleOpenXChangeCall:setBoxContents {currentBox.Aggregate("", (s, i) => s + i.id + "/" + i.count)}"); currentXChange[playerId] = currentBox.Select(I => XChangeItem(I, itemBox)).ToList(); Configuration.Save(); }
private ItemStack XChangeItem(ItemStack aItem, ItemBox itemBox) { var sourceItem = Configuration.Current.AllowedItems.FirstOrDefault(I => I.itemId == itemBox.itemId); var destItem = Configuration.Current.AllowedItems.FirstOrDefault(I => I.itemId == aItem.id); Log($"**HandleOpenXChangeCall:xChangeItem {sourceItem?.fullName}:{sourceItem?.itemCount} -> {destItem?.fullName}:{destItem?.itemCount}"); if (sourceItem == null || destItem == null || sourceItem.itemCount < aItem.count || sourceItem.itemId == destItem.itemId) { return(aItem); } sourceItem.itemCount -= aItem.count; destItem.itemCount += aItem.count; aItem.id = itemBox.itemId; return(aItem); }