/// <summary> /// Returns the value of the specified character's given special. /// </summary> /// <returns>Returns 0 if character or special values are null.</returns> public int GetSpecial(Character character, Globals.SpecialType special) { if (character == null || !IsSpecialSet(character)) { return(0); } return((int)typeof(Special).GetProperty(special.ToString()).GetValue(character.Special)); }
public async Task <string> GetSpRollAsync(IUser user, Globals.SpecialType specialToRoll) { var character = await _charService.GetCharacterAsync(user.Id); if (character == null) { return(String.Format(Messages.ERR_CHAR_NOT_FOUND, user.Mention)); } if (!_specService.IsSpecialSet(character)) { return(String.Format(Messages.ERR_SPECIAL_NOT_FOUND, user.Mention)); } return(GetRollMessage(character.Name, specialToRoll.ToString(), GetRollResult(specialToRoll, character))); }
public async Task CheckSpecial(IUser user, Globals.SpecialType special, int minimum) { var character = await _charService.GetCharacterAsync(user.Id); if (character == null) { await ReplyAsync(String.Format(Messages.ERR_CHAR_NOT_FOUND, user.Username)); return; } if (!_specialService.IsSpecialSet(character)) { await ReplyAsync(String.Format(Messages.ERR_SPECIAL_NOT_FOUND, user.Username)); return; } int specialValue = _specialService.GetSpecial(character, special); await ReplyAsync(GetCheckMessage(character.Name, special.ToString(), specialValue, minimum)); }
public double GetRollResult(Globals.SpecialType attribute, Character character) { var charSkills = character.Skills; var charSpecial = character.Special; // match given attribute string to property in character int attributeValue = 0; int rng = 0; attributeValue = _specService.GetSpecial(character, attribute); rng = _rand.Next(1, 11); // affects odds by the percentage of LUCK_INFLUENCE for each point of luck above or below 5. // i.e. if you have 6 luck, and LUCK_INFLUENCE == 5, then now your odds are multiplied by 0.95, // which is a good thing. int luckDifference = charSpecial.Luck - 5; double luckMultiplier = 1.0 - (luckDifference * (LUCK_INFLUENCE / 100.0)); double finalResult; if (LUCK_INFLUENCE_ENABLED) { finalResult = rng * luckMultiplier; } else { finalResult = rng; } // compares your roll with your skills, and how much better you did than the bare minimum double resultPercent = (attributeValue - finalResult) / attributeValue; // make it pretty for chat resultPercent = Math.Round(resultPercent * 100.0, 1); return(resultPercent); }
public async Task RollSpecial(Globals.SpecialType special) { await ReplyAsync($"{await _rollService.GetSpRollAsync(Context.User, special)} ({Context.User.Mention})"); }