private static DiceDto AddDieStr(DiceRoll diceRoll, CardDto cardDto, DndViewer viewer, string dieStr, string dieLabelOverride = null, int targetCharacterId = int.MinValue) { string dieBackColorOverride = viewer.DieBackColor; string dieTextColorOverride = viewer.DieTextColor; int parenIndex = dieStr.IndexOf("("); DamageType damageType = DamageType.None; DieCountsAs dieCountsAs = DieCountsAs.totalScore; string diePlayerName = cardDto.Card.UserName; double modifier = 0; double scaleOverride = viewer.Reputation + 0.30; int dieOwnerOverride = int.MinValue; if (parenIndex >= 0) { ProcessDieDetails(diceRoll, targetCharacterId, ref dieStr, ref dieBackColorOverride, ref dieTextColorOverride, parenIndex, ref damageType, ref dieCountsAs, ref modifier, ref diePlayerName, ref scaleOverride, ref dieOwnerOverride); } string[] dieParts = dieStr.Split('d'); if (dieParts.Length != 2) { return(null); } string dieLabel; if (string.IsNullOrWhiteSpace(dieLabelOverride) || dieLabelOverride.Trim() == "\"\"") { dieLabel = $"{cardDto.Card.UserName}"; } else { dieLabel = dieLabelOverride.Trim().TrimStart('"').TrimEnd('"'); } int quantity; int sides; if (!int.TryParse(dieParts[0], out quantity) || !int.TryParse(dieParts[1], out sides)) { return(null); } DiceDto diceDto = new DiceDto() { PlayerName = diePlayerName, CreatureId = dieOwnerOverride, Sides = sides, Quantity = quantity, Label = dieLabel.Replace("target_name", DndUtils.GetFirstName(diePlayerName)), Scale = scaleOverride, Modifier = modifier, DamageType = damageType, BackColor = dieBackColorOverride, FontColor = dieTextColorOverride, DieCountsAs = dieCountsAs, Data = cardDto.Card.Guid }; diceRoll.DiceDtos.Add(diceDto); return(diceDto); }
public static DiceDto D20FromInGameCreature(InGameCreature inGameCreature, DiceRollType diceRollType) { DieCountsAs dieCountsAs = DieCountsAs.totalScore; double modifier = 0; string label; if (IsSavingThrow(diceRollType)) { dieCountsAs = DieCountsAs.savingThrow; label = $"{inGameCreature.Name}'s Save"; } else { label = inGameCreature.Name; } return(AddD20ForCreature(inGameCreature, label, modifier, dieCountsAs)); }
private static void ProcessDieDetails(DiceRoll diceRoll, int dieOwnerId, ref string dieStr, ref string dieBackColorOverride, ref string dieTextColorOverride, int parenIndex, ref DamageType damageType, ref DieCountsAs dieCountsAs, ref double modifier, ref string diePlayerName, ref double scaleOverride, ref int dieOwnerOverride) { string dieTypeStr = dieStr.Substring(parenIndex).Trim(); dieStr = dieStr.Substring(0, parenIndex); int colonPos = dieTypeStr.IndexOf(':'); if (colonPos > 0) { // Die format specifier - "type:detail", e.g., "save:Dexterity" for a Dexterity saving throw. string[] dieTypeParts = dieTypeStr.TrimStart('(').TrimEnd(')').Split(':'); if (dieTypeParts.Length == 2) { string rollKindStr = dieTypeParts[0]; string rollData = dieTypeParts[1]; if (rollKindStr == "save") { PrepareForSavingThrow(diceRoll, dieOwnerId, rollData, ref dieBackColorOverride, ref dieTextColorOverride, ref modifier, ref diePlayerName, ref scaleOverride, ref dieOwnerOverride); dieCountsAs = DieCountsAs.savingThrow; } else { dieCountsAs = DieCountsAs.totalScore; } } } else { // Probably just straight damage... damageType = DndUtils.ToDamage(dieTypeStr); if (damageType != DamageType.None) { dieCountsAs = DieCountsAs.damage; } } }
private static DiceDto AddD20ForCreature(InGameCreature inGameCreature, string label, double modifier, DieCountsAs dieCountsAs) { return(new DiceDto() { PlayerName = inGameCreature.Name, CreatureId = -inGameCreature.Index, Sides = 20, Quantity = 1, Label = label, Modifier = modifier, DamageType = DamageType.None, BackColor = inGameCreature.BackgroundHex, FontColor = inGameCreature.ForegroundHex, DieCountsAs = dieCountsAs }); }
public static DiceDto AddD20ForCharacter(Character player, string label, double modifier, DieCountsAs dieCountsAs) { return(new DiceDto() { PlayerName = player.Name, CreatureId = player.IntId, Sides = 20, Quantity = 1, Label = label, Modifier = modifier, DamageType = DamageType.None, BackColor = player.dieBackColor, FontColor = player.dieFontColor, DieCountsAs = dieCountsAs }); }