public DougResponse Give(Command command) { var amount = int.Parse(command.GetArgumentAt(1)); if (amount <= 0) { return(new DougResponse(DougMessages.InvalidAmount)); } if (!command.IsUserArgument()) { return(new DougResponse(DougMessages.InvalidUserArgument)); } var user = _userRepository.GetUser(command.UserId); var target = _userRepository.GetUser(command.GetTargetUserId()); if (!user.HasEnoughCreditsForAmount(amount)) { return(new DougResponse(user.NotEnoughCreditsForAmountResponse(amount))); } _creditsRepository.RemoveCredits(user.Id, amount); _creditsRepository.AddCredits(target.Id, amount); var message = string.Format(DougMessages.UserGaveCredits, _userService.Mention(user), amount, _userService.Mention(target)); _slack.BroadcastMessage(message, command.ChannelId); return(NoResponse); }
public DougResponse Gamble(Command command) { var user = _userRepository.GetUser(command.UserId); var amount = int.Parse(command.GetArgumentAt(0)); if (amount < 0) { return(new DougResponse(DougMessages.InvalidAmount)); } if (!user.HasEnoughCreditsForAmount(amount)) { return(new DougResponse(user.NotEnoughCreditsForAmountResponse(amount))); } var cost = (int)Math.Ceiling(amount / 10.0); var energy = user.Energy - cost; if (energy < 0) { return(new DougResponse(DougMessages.NotEnoughEnergy)); } _statsRepository.UpdateEnergy(command.UserId, energy); string baseMessage; if (UserCoinFlipWin(user)) { baseMessage = DougMessages.WonGamble; _creditsRepository.AddCredits(command.UserId, amount); } else { baseMessage = DougMessages.LostGamble; _creditsRepository.RemoveCredits(command.UserId, amount); } var message = string.Format(baseMessage, _userService.Mention(user), amount); _slack.BroadcastMessage(message, command.ChannelId); return(NoResponse); }
public override int OnCriticalHit(User attacker, ICombatable target, int damage, string channel) { var min = (int)Math.Floor(damage * 0.01); var max = (int)Math.Ceiling(damage * 0.05); var amount = Math.Max(1, new Random().Next(min, max)); var message = string.Format(DougMessages.GainedCredit, amount); _creditsRepository.AddCredits(attacker.Id, amount); _slack.SendEphemeralMessage(message, attacker.Id, channel); return(base.OnCriticalHit(attacker, target, damage, channel)); }
public DougResponse AddSlur(Command command) { var existingSlur = _slurRepository.GetSlurByText(command.Text); if (existingSlur != null) { return(new DougResponse(DougMessages.SlurAlreadyExists)); } var slur = new Slur(command.Text, command.UserId); _slurRepository.AddSlur(slur); _creditsRepository.AddCredits(command.UserId, AddSlurCredit); return(new DougResponse(string.Format(DougMessages.GainedCredit, AddSlurCredit))); }
public DougResponse Sell(User user, int position) { var item = user.InventoryItems.SingleOrDefault(itm => itm.InventoryPosition == position)?.Item; if (item == null) { return(new DougResponse(string.Format(DougMessages.NoItemInSlot, position))); } if (!item.IsSellable) { return(new DougResponse(DougMessages.ItemNotTradable)); } _inventoryRepository.RemoveItem(user, position); _creditsRepository.AddCredits(user.Id, item.Price / 2); return(new DougResponse(string.Format(DougMessages.SoldItem, item.GetDisplayName(), item.Price / 2))); }
private async Task <DougResponse> StealFromUser(User user, User target, string channel) { _statsRepository.SetSkillCooldown(user.Id, TimeSpan.FromSeconds(Cooldown)); var userChance = _eventDispatcher.OnStealingChance(user, user.BaseStealSuccessRate()); var targetChance = _eventDispatcher.OnGettingStolenChance(target, target.BaseOpponentStealSuccessRate()); var rollSuccessful = _randomService.RollAgainstOpponent(userChance, targetChance); var detected = !_randomService.RollAgainstOpponent(user.BaseDetectionAvoidance(), target.BaseDetectionChance()); var amount = _eventDispatcher.OnStealingAmount(user, user.BaseStealAmount()); if (target.Credits - amount < 0) { amount = target.Credits; } string message; DougResponse sneakResponse; if (rollSuccessful) { _creditsRepository.RemoveCredits(target.Id, amount); _creditsRepository.AddCredits(user.Id, amount); message = string.Format(DougMessages.StealCreditsCaught, _userService.Mention(user), amount, _userService.Mention(target)); sneakResponse = new DougResponse(string.Format(DougMessages.StealCredits, amount, _userService.Mention(target))); } else { message = string.Format(DougMessages.StealFailCaught, _userService.Mention(user), _userService.Mention(target)); sneakResponse = new DougResponse(string.Format(DougMessages.StealFail, _userService.Mention(target))); } if (detected) { await _slack.BroadcastMessage(message, channel); } return(sneakResponse); }