// Add clicked private void Button_Click(object sender, RoutedEventArgs e) { NewDamageDieDialog nddd = new NewDamageDieDialog(); if (nddd.ShowDialog() ?? false) { DamageLine dl = new DamageLine() { DieSide = nddd.IntUD_DieSide.Value, NumDice = nddd.IntUD_NumDice.Value, ConstantNumber = nddd.IntUD_Constant.Value, Label = nddd.TB_Label.Text }; this.Integration.Damage.Add(dl); } }
public void ApplyDamage(AttributesSheet casterAttributes, DamageLine line, bool isCritical, Weapon weapon = null) { float value = line.FinalValue; if (isCritical) { value *= 1.5f + casterAttributes.GetCriticalDamageModifier(); } Debug.Log(UnitName + ": damaged " + value + " (" + line.DamageType + ")(" + line.ElementType + ")(" + isCritical + ")"); int oldValue = AttributesSheet.CurrentHealth; AttributesSheet.CurrentHealth -= (int)value; Debug.Log(UnitName + ": " + oldValue + " => " + AttributesSheet.CurrentHealth); Animator.Play(AnimationPrefix + "Take Damage"); CombatUIManager.UpdateHealthBar(); UpdateHealthSlider(); UpdateIsAlive(); }
private void Btn_Delete_Click(object sender, RoutedEventArgs e) { DamageLine context = (DamageLine)((FrameworkElement)sender).DataContext; this.Integration.Damage.Remove(context); }
public static void RunItemsRoll20Integration(InventoryItem ii) { SimpleItemIntegration sii = ii.Integration; if (sii != null) { // Determine integration type if (sii.HitDieSide <= 0) // No hit die { if (sii.Damage.Count == 0) // No damage, description { R20WSServer.Send(new CommandPacket { GMRoll = false, Template = Roll20.Template.Description, Data = new TemplateDataDesc { Desc = "** " + ii.Name + " **\n" + ii.Description } }); } else // Have damage, but no hit die { string damageString = "[["; for (int i = 0; i < sii.Damage.Count; i++) { DamageLine dl = sii.Damage[i]; if (dl.DieSide > 0 && dl.ConstantNumber != 0) { damageString += $"[[[[{dl.NumDice}d{dl.DieSide}]] + {dl.ConstantNumber}]][{dl.Label}]"; } else { if (dl.DieSide > 0) { damageString += $"[[{dl.NumDice}d{dl.DieSide}]][{dl.Label}]"; } else { damageString += $"{dl.ConstantNumber}[{dl.Label}]"; } } if (i != sii.Damage.Count - 1) { damageString += "+"; } } if (sii.DamageIncludeStr) { damageString += $"+{AppState.Current.State.General.StatModStr}[{MainWindow.Translate("General_Str")}]"; } if (sii.DamageIncludeDex) { damageString += $"+{AppState.Current.State.General.StatModDex}[{MainWindow.Translate("General_Dex")}]"; } if (sii.DamageIncludeCon) { damageString += $"+{AppState.Current.State.General.StatModCon}[{MainWindow.Translate("General_Con")}]"; } if (sii.DamageIncludeWis) { damageString += $"+{AppState.Current.State.General.StatModWis}[{MainWindow.Translate("General_Wis")}]"; } if (sii.DamageIncludeCha) { damageString += $"+{AppState.Current.State.General.StatModCha}[{MainWindow.Translate("General_Cha")}]"; } if (sii.DamageIncludeInt) { damageString += $"+{AppState.Current.State.General.StatModInt}[{MainWindow.Translate("General_Int")}]"; } damageString += "]]"; R20WSServer.Send(new CommandPacket { GMRoll = false, Template = Roll20.Template.Dmg, Data = new TemplateDataDmg { CharName = AppState.Current.State.General.Name, Name = ii.Name, Dmg1 = damageString, Dmg2 = damageString } }); } } else // Have hit die { string hitString = $"[[[[1d{sii.HitDieSide}]][1d{sii.HitDieSide}]"; if (sii.HitConstant > 0) { hitString += $"+{sii.HitConstant}"; } if (sii.HitIncludeProfficiency) { hitString += $"+{AppState.Current.State.General.ProfficiencyBonus}[{MainWindow.Translate("General_PBonus")}]"; } if (sii.HitIncludeStr) { hitString += $"+{AppState.Current.State.General.StatModStr}[{MainWindow.Translate("General_Str")}]"; } if (sii.HitIncludeDex) { hitString += $"+{AppState.Current.State.General.StatModDex}[{MainWindow.Translate("General_Dex")}]"; } if (sii.HitIncludeCon) { hitString += $"+{AppState.Current.State.General.StatModCon}[{MainWindow.Translate("General_Con")}]"; } if (sii.HitIncludeWis) { hitString += $"+{AppState.Current.State.General.StatModWis}[{MainWindow.Translate("General_Wis")}]"; } if (sii.HitIncludeCha) { hitString += $"+{AppState.Current.State.General.StatModCha}[{MainWindow.Translate("General_Cha")}]"; } if (sii.HitIncludeInt) { hitString += $"+{AppState.Current.State.General.StatModInt}[{MainWindow.Translate("General_Int")}]"; } hitString += "]]"; if (sii.Damage.Count == 0) // Have no damage die { R20WSServer.Send(new CommandPacket { GMRoll = false, Template = Roll20.Template.Simple, Data = new TemplateDataSimple { CharName = AppState.Current.State.General.Name, Name = ii.Name, R1 = hitString, R2 = hitString } }); } else // Have damage die { string damageString = "[["; string critString = "[["; for (int i = 0; i < sii.Damage.Count; i++) { DamageLine dl = sii.Damage[i]; if (dl.DieSide > 0 && dl.ConstantNumber != 0) { damageString += $"[[[[{dl.NumDice}d{dl.DieSide}]][{dl.NumDice}d{dl.DieSide}] + {dl.ConstantNumber}]][{dl.Label}]"; critString += $"[[{dl.NumDice}d{dl.DieSide}]][{dl.NumDice}d{dl.DieSide} {dl.Label}]"; } else { if (dl.DieSide > 0) { damageString += $"[[{dl.NumDice}d{dl.DieSide}]][{dl.NumDice}d{dl.DieSide} {dl.Label}]"; critString += $"[[{dl.NumDice}d{dl.DieSide}]][{dl.NumDice}d{dl.DieSide} {dl.Label}]"; } else { damageString += $"{dl.ConstantNumber}[{dl.Label}]"; } } if (i != sii.Damage.Count - 1) { damageString += "+"; critString += "+"; } } while (critString[critString.Length - 1] == '+') { critString = critString.Substring(0, critString.Length - 1); } critString += "]]"; if (sii.DamageIncludeStr) { damageString += $"+{AppState.Current.State.General.StatModStr}[{MainWindow.Translate("General_Str")}]"; } if (sii.DamageIncludeDex) { damageString += $"+{AppState.Current.State.General.StatModDex}[{MainWindow.Translate("General_Dex")}]"; } if (sii.DamageIncludeCon) { damageString += $"+{AppState.Current.State.General.StatModCon}[{MainWindow.Translate("General_Con")}]"; } if (sii.DamageIncludeWis) { damageString += $"+{AppState.Current.State.General.StatModWis}[{MainWindow.Translate("General_Wis")}]"; } if (sii.DamageIncludeCha) { damageString += $"+{AppState.Current.State.General.StatModCha}[{MainWindow.Translate("General_Cha")}]"; } if (sii.DamageIncludeInt) { damageString += $"+{AppState.Current.State.General.StatModInt}[{MainWindow.Translate("General_Int")}]"; } damageString += "]]"; R20WSServer.Send(new CommandPacket { GMRoll = false, Template = Roll20.Template.AtkDmg, Data = new TemplateDataAtkDmg { CharName = AppState.Current.State.General.Name, Crit = critString, Dmg = damageString, R1 = hitString, R2 = hitString, Name = ii.Name } }); } } } }