Ejemplo n.º 1
0
        // 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);
            }
        }
Ejemplo n.º 2
0
    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();
    }
Ejemplo n.º 3
0
        private void Btn_Delete_Click(object sender, RoutedEventArgs e)
        {
            DamageLine context = (DamageLine)((FrameworkElement)sender).DataContext;

            this.Integration.Damage.Remove(context);
        }
Ejemplo n.º 4
0
        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
                            }
                        });
                    }
                }
            }
        }