public override void HandleCommand(NotifyTextMessageEvent evt, string command, List <string> parameters, Action <string> messageCallback) { Client target = null; if (TargetName != null) { target = Parent.Client.GetClientByNamePart(TargetName); } if (target == null) { target = Parent.Client.GetClientById(evt.InvokerId); } if (IsSendingBalance) { if (SendParam == "all") { SendAmount = (uint)Math.Max(0, EconomyManager.GetBalanceForUser(evt.InvokerUniqueId)); } else if (SendParam == "excess") { int tempB = EconomyManager.GetBalanceForUser(evt.InvokerUniqueId); if (tempB > Settings.EcoSoftBalanceLimit) { SendAmount = (uint)(tempB - Settings.EcoSoftBalanceLimit); } else { SendAmount = 0; } } if (SendAmount == 0) { messageCallback.Invoke(ColorCoder.ErrorBright($"Why would you want to send {ColorCoder.Currency(0)}? What are you, stupid {ColorCoder.Username(evt.InvokerName)}")); return; } else if (EconomyManager.GetUserBalanceAfterPaying(evt.InvokerUniqueId, (int)SendAmount) < 0) { messageCallback.Invoke(ColorCoder.ErrorBright($"You can't afford to send that much cash, {ColorCoder.Username(evt.InvokerName)}")); return; } else if (EconomyManager.GetUserBalanceAfterPaying(target.UniqueId, -1 * (int)SendAmount) > Settings.EcoSoftBalanceLimit) { messageCallback.Invoke(ColorCoder.ErrorBright($"You can't send that much cash because {ColorCoder.Username(target.Nickname)} would have more than '{ColorCoder.Currency(Settings.EcoSoftBalanceLimit)}'")); return; } EconomyManager.ChangeBalanceForUser(evt.InvokerUniqueId, (-1) * (int)SendAmount); EconomyManager.ChangeBalanceForUser(target.UniqueId, (int)SendAmount); messageCallback.Invoke(ColorCoder.SuccessDim($"Sent '{ColorCoder.Currency(SendAmount)}' to {ColorCoder.Username(target.Nickname)}")); } else if (command == "setbalance") { int setAmount = SetAmount; if (SetAmountIsRelative) { setAmount += EconomyManager.GetBalanceForUser(target.UniqueId); } EconomyManager.SetBalanceForUser(target.UniqueId, setAmount); int setTo = EconomyManager.GetBalanceForUser(target.UniqueId); messageCallback.Invoke(ColorCoder.Success($"Set balance for {ColorCoder.Username(target.Nickname)} to {ColorCoder.Bold($"{setTo} {Settings.EcoPointUnitName}")}")); } else { int max = Settings.EcoSoftBalanceLimit; int balance = EconomyManager.GetBalanceForUser(target.UniqueId); messageCallback.Invoke($"Balance of {ColorCoder.Username(target.Nickname)}: {ColorCoder.Bold(balance.ToString())} / {ColorCoder.Bold($"{max} {Settings.EcoPointUnitName}")}"); } }