protected override async Task PerformInternal(CommandParametersModel parameters) { CurrencyModel currency = null; InventoryModel inventory = null; InventoryItemModel item = null; StreamPassModel streamPass = null; string systemName = null; if (this.CurrencyID != Guid.Empty) { if (!ChannelSession.Settings.Currency.ContainsKey(this.CurrencyID)) { return; } currency = ChannelSession.Settings.Currency[this.CurrencyID]; systemName = currency.Name; } if (this.InventoryID != Guid.Empty) { if (!ChannelSession.Settings.Inventory.ContainsKey(this.InventoryID)) { return; } inventory = ChannelSession.Settings.Inventory[this.InventoryID]; systemName = inventory.Name; if (!string.IsNullOrEmpty(this.ItemName)) { string itemName = await ReplaceStringWithSpecialModifiers(this.ItemName, parameters); item = inventory.GetItem(itemName); if (item == null) { return; } } } if (this.StreamPassID != Guid.Empty) { if (!ChannelSession.Settings.StreamPass.ContainsKey(this.StreamPassID)) { return; } streamPass = ChannelSession.Settings.StreamPass[this.StreamPassID]; systemName = streamPass.Name; } if (this.ActionType == ConsumablesActionTypeEnum.ResetForAllUsers) { if (currency != null) { await currency.Reset(); } else if (inventory != null) { await inventory.Reset(); } else if (streamPass != null) { await streamPass.Reset(); } } else if (this.ActionType == ConsumablesActionTypeEnum.ResetForUser) { if (currency != null) { currency.ResetAmount(parameters.User.Data); } else if (inventory != null) { inventory.ResetAmount(parameters.User.Data); } else if (streamPass != null) { streamPass.ResetAmount(parameters.User.Data); } } else { string amountTextValue = await ReplaceStringWithSpecialModifiers(this.Amount, parameters); amountTextValue = MathHelper.ProcessMathEquation(amountTextValue).ToString(); if (!double.TryParse(amountTextValue, out double doubleAmount)) { await ChannelSession.Services.Chat.SendMessage(string.Format(MixItUp.Base.Resources.CounterActionNotAValidAmount, amountTextValue, systemName)); return; } int amountValue = (int)Math.Ceiling(doubleAmount); if (amountValue < 0) { await ChannelSession.Services.Chat.SendMessage(string.Format(MixItUp.Base.Resources.GameCurrencyRequirementAmountGreaterThan, amountTextValue, systemName)); return; } HashSet <UserDataModel> receiverUserData = new HashSet <UserDataModel>(); if (this.ActionType == ConsumablesActionTypeEnum.AddToUser) { receiverUserData.Add(parameters.User.Data); } else if (this.ActionType == ConsumablesActionTypeEnum.AddToSpecificUser || this.ActionType == ConsumablesActionTypeEnum.SubtractFromSpecificUser) { if (!string.IsNullOrEmpty(this.Username)) { string usernameString = await ReplaceStringWithSpecialModifiers(this.Username, parameters); UserViewModel receivingUser = null; if (this.UsersMustBePresent) { receivingUser = ChannelSession.Services.User.GetActiveUserByUsername(usernameString, parameters.Platform); } else { receivingUser = await ChannelSession.Services.User.GetUserFullSearch(parameters.Platform, userID : null, usernameString); } if (receivingUser != null) { receiverUserData.Add(receivingUser.Data); } else { await ChannelSession.Services.Chat.SendMessage(MixItUp.Base.Resources.UserNotFound); return; } } } else if (this.ActionType == ConsumablesActionTypeEnum.AddToAllChatUsers || this.ActionType == ConsumablesActionTypeEnum.SubtractFromAllChatUsers) { foreach (UserViewModel chatUser in ChannelSession.Services.User.GetAllWorkableUsers()) { if (chatUser.HasPermissionsTo(this.UsersToApplyTo)) { receiverUserData.Add(chatUser.Data); } } receiverUserData.Add(ChannelSession.GetCurrentUser().Data); } if ((this.DeductFromUser && receiverUserData.Count > 0) || this.ActionType == ConsumablesActionTypeEnum.SubtractFromUser) { if (currency != null) { if (!currency.HasAmount(parameters.User.Data, amountValue)) { await ChannelSession.Services.Chat.SendMessage(string.Format(MixItUp.Base.Resources.CurrencyRequirementDoNotHaveAmount, amountValue, systemName)); return; } currency.SubtractAmount(parameters.User.Data, amountValue); } else if (inventory != null) { if (!inventory.HasAmount(parameters.User.Data, item, amountValue)) { await ChannelSession.Services.Chat.SendMessage(string.Format(MixItUp.Base.Resources.CurrencyRequirementDoNotHaveAmount, amountValue, item.Name)); return; } inventory.SubtractAmount(parameters.User.Data, item, amountValue); } else if (streamPass != null) { if (!streamPass.HasAmount(parameters.User.Data, amountValue)) { await ChannelSession.Services.Chat.SendMessage(string.Format(MixItUp.Base.Resources.CurrencyRequirementDoNotHaveAmount, amountValue, systemName)); return; } streamPass.SubtractAmount(parameters.User.Data, amountValue); } } if (receiverUserData.Count > 0) { foreach (UserDataModel receiverUser in receiverUserData) { if (currency != null) { if (this.ActionType == ConsumablesActionTypeEnum.SubtractFromSpecificUser || this.ActionType == ConsumablesActionTypeEnum.SubtractFromAllChatUsers) { currency.SubtractAmount(receiverUser, amountValue); } else { currency.AddAmount(receiverUser, amountValue); } } else if (inventory != null) { if (this.ActionType == ConsumablesActionTypeEnum.SubtractFromSpecificUser || this.ActionType == ConsumablesActionTypeEnum.SubtractFromAllChatUsers) { inventory.SubtractAmount(receiverUser, item, amountValue); } else { inventory.AddAmount(receiverUser, item, amountValue); } } else if (streamPass != null) { if (this.ActionType == ConsumablesActionTypeEnum.SubtractFromSpecificUser || this.ActionType == ConsumablesActionTypeEnum.SubtractFromAllChatUsers) { streamPass.SubtractAmount(receiverUser, amountValue); } else { streamPass.AddAmount(receiverUser, amountValue); } } } } } }
protected override async Task PerformInternal(UserViewModel user, IEnumerable <string> arguments) { if (ChannelSession.Services.Chat != null) { CurrencyModel currency = null; InventoryModel inventory = null; InventoryItemModel item = null; StreamPassModel streamPass = null; string systemName = null; if (this.CurrencyID != Guid.Empty) { if (!ChannelSession.Settings.Currency.ContainsKey(this.CurrencyID)) { return; } currency = ChannelSession.Settings.Currency[this.CurrencyID]; systemName = currency.Name; } if (this.InventoryID != Guid.Empty) { if (!ChannelSession.Settings.Inventory.ContainsKey(this.InventoryID)) { return; } inventory = ChannelSession.Settings.Inventory[this.InventoryID]; systemName = inventory.Name; if (!string.IsNullOrEmpty(this.ItemName)) { string itemName = await this.ReplaceStringWithSpecialModifiers(this.ItemName, user, arguments); item = inventory.GetItem(itemName); if (item == null) { return; } } } if (this.StreamPassID != Guid.Empty) { if (!ChannelSession.Settings.StreamPass.ContainsKey(this.StreamPassID)) { return; } streamPass = ChannelSession.Settings.StreamPass[this.StreamPassID]; systemName = streamPass.Name; } if (this.CurrencyActionType == CurrencyActionTypeEnum.ResetForAllUsers) { if (currency != null) { await currency.Reset(); } else if (inventory != null) { await inventory.Reset(); } else if (streamPass != null) { await streamPass.Reset(); } } else if (this.CurrencyActionType == CurrencyActionTypeEnum.ResetForUser) { if (currency != null) { currency.ResetAmount(user.Data); } else if (inventory != null) { inventory.ResetAmount(user.Data); } else if (streamPass != null) { streamPass.ResetAmount(user.Data); } } else { string amountTextValue = await this.ReplaceStringWithSpecialModifiers(this.Amount, user, arguments); if (!double.TryParse(amountTextValue, out double doubleAmount)) { await ChannelSession.Services.Chat.SendMessage(string.Format("{0} is not a valid amount of {1}", amountTextValue, systemName)); return; } int amountValue = (int)Math.Ceiling(doubleAmount); if (amountValue <= 0) { await ChannelSession.Services.Chat.SendMessage("The amount specified must be greater than 0"); return; } HashSet <UserDataModel> receiverUserData = new HashSet <UserDataModel>(); if (this.CurrencyActionType == CurrencyActionTypeEnum.AddToUser) { receiverUserData.Add(user.Data); } else if (this.CurrencyActionType == CurrencyActionTypeEnum.AddToSpecificUser || this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromSpecificUser) { if (!string.IsNullOrEmpty(this.Username)) { string usernameString = await this.ReplaceStringWithSpecialModifiers(this.Username, user, arguments); UserViewModel receivingUser = ChannelSession.Services.User.GetUserByUsername(usernameString, this.platform); if (receivingUser != null) { receiverUserData.Add(receivingUser.Data); } else { await ChannelSession.Services.Chat.SendMessage("The user could not be found"); return; } } } else if (this.CurrencyActionType == CurrencyActionTypeEnum.AddToAllChatUsers || this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromAllChatUsers) { foreach (UserViewModel chatUser in ChannelSession.Services.User.GetAllWorkableUsers()) { if (chatUser.HasPermissionsTo(this.RoleRequirement)) { receiverUserData.Add(chatUser.Data); } } receiverUserData.Add(ChannelSession.GetCurrentUser().Data); } if ((this.DeductFromUser && receiverUserData.Count > 0) || this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromUser) { if (currency != null) { if (!currency.HasAmount(user.Data, amountValue)) { await ChannelSession.Services.Chat.SendMessage(string.Format("You do not have the required {0} {1} to do this", amountValue, systemName)); return; } currency.SubtractAmount(user.Data, amountValue); } else if (inventory != null) { if (!inventory.HasAmount(user.Data, item, amountValue)) { await ChannelSession.Services.Chat.SendMessage(string.Format("You do not have the required {0} {1} to do this", amountValue, item)); return; } inventory.SubtractAmount(user.Data, item, amountValue); } else if (streamPass != null) { if (!streamPass.HasAmount(user.Data, amountValue)) { await ChannelSession.Services.Chat.SendMessage(string.Format("You do not have the required {0} {1} to do this", amountValue, systemName)); return; } streamPass.SubtractAmount(user.Data, amountValue); } } if (receiverUserData.Count > 0) { foreach (UserDataModel receiverUser in receiverUserData) { if (currency != null) { if (this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromSpecificUser || this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromAllChatUsers) { currency.SubtractAmount(receiverUser, amountValue); } else { currency.AddAmount(receiverUser, amountValue); } } else if (inventory != null) { if (this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromSpecificUser || this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromAllChatUsers) { inventory.SubtractAmount(receiverUser, item, amountValue); } else { inventory.AddAmount(receiverUser, item, amountValue); } } else if (streamPass != null) { if (this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromSpecificUser || this.CurrencyActionType == CurrencyActionTypeEnum.SubtractFromAllChatUsers) { streamPass.SubtractAmount(receiverUser, amountValue); } else { streamPass.AddAmount(receiverUser, amountValue); } } } } } } }