public void Check_For_Wrong_Stats(ref Equipment_Foundation Weapon_Editor, Stat Select_Stat)
 {
     if (Weapon_Editor.Get_Stat(Select_Stat) != 0)
     {
         EditorGUILayout.HelpBox(Select_Stat.ToString() + " is not equal to zero, if this is okay contact me",MessageType.Warning);
     }
 }
    //************************************//
    //****************Equip***************//
    //************************************//
    public virtual void Equip(Equipment_Foundation Equipment, Assign_Slot Equip_Slot)
    {
        Statuses_Activate(State.Equip);
        Slot[Equip_Slot.toInt()].Passives.ForEach(p => Passives.Remove(p));
        Slot[Equip_Slot.toInt()] = Equipment;
        if (Equipment.Passives.Count > 0)
        {
            Equipment.Passives.ForEach(p => Passives.Add(p));
        }

        Turn = false;
    }
    protected void Display_All_Stats(ref Equipment_Foundation Equipment_Foundation_Editor)
    {
        Layout.Text("Name", ref Equipment_Foundation_Editor.Name);
        Layout.Text("Description", ref Equipment_Foundation_Editor.Description);
        Display_Class_Stats(ref Equipment_Foundation_Editor);

        if (Equipment_Foundation_Editor.Class != Assign_Class.Ammo &&
            Equipment_Foundation_Editor.Subclass != Assign_Subclass.Arrow &&
            Equipment_Foundation_Editor.Subclass != Assign_Subclass.Bolt)
        {
            Display_AOE_Foldout(ref Equipment_Foundation_Editor);
            Display_Config_Foldout(ref Equipment_Foundation_Editor);
            Damage_Foldout = EditorGUILayout.Foldout(Damage_Foldout, "Stats");
            if (Damage_Foldout)
            {
                Layout.Float("Tier",ref Equipment_Foundation_Editor.Level);
                Display_Damage_Foldout(ref Equipment_Foundation_Editor);
            }
        }
        else
        {
            Display_Stat("Archery Damage",ref Equipment_Foundation_Editor,Stat.Archery_Damage);
            Display_Stat("Accuracy",ref Equipment_Foundation_Editor,Stat.Accuracy);
            foreach (Stat All_Stats in System.Enum.GetValues(typeof(Stat)))
            {
                if (All_Stats != Stat.Archery_Damage && All_Stats != Stat.Accuracy)
                {
                    Check_For_Wrong_Stats(ref Equipment_Foundation_Editor,All_Stats);
                }
            }
        }

        if (Equipment_Foundation_Editor.Class != Assign_Class.Archery &&
            Equipment_Foundation_Editor.Class != Assign_Class.Magic)
        {
            EditorGUILayout.PropertyField(Defect,true);
        }
        else
        {
            if (Equipment_Foundation_Editor.Defect != System_Control.Defect.None)
            {
                EditorGUILayout.HelpBox("Defect is not set to None, if this is expected please contact me",MessageType.Warning);
            }
        }
        Display_Passive();
        Notes(Equipment_Foundation_Editor);
    }
    private void Equipment(ref Creature Creature_Editor)
    {
        EditorGUILayout.ObjectField("Primary Hand",Creature_Editor.Slot[(int)Assign_Slot.Primary_Hand],typeof(Equipment_Foundation),true);
        EditorGUILayout.ObjectField("Secondary Hand",Creature_Editor.Slot[(int)Assign_Slot.Secondary_Hand],typeof(Equipment_Foundation),true);
        EditorGUILayout.ObjectField("Armor",Creature_Editor.Slot[(int)Assign_Slot.Armor],typeof(Equipment_Foundation),true);
        EditorGUILayout.ObjectField("Arrow",Creature_Editor.Slot[(int)Assign_Slot.Arrow],typeof(Equipment_Foundation),true);

        EditorGUILayout.BeginHorizontal ();
        Equipped = (Equipment_Foundation)EditorGUILayout.ObjectField("Equip",Equipped,typeof(Equipment_Foundation),true);
        Slot = (Assign_Slot)EditorGUILayout.EnumPopup(Slot);
        if(GUILayout.Button("Yield",GUILayout.Width(45f),GUILayout.Height(14f)))
        {
            Creature_Editor.Equip(Equipped,Slot);
        }
        if(GUILayout.Button("Reset",GUILayout.Width(45f),GUILayout.Height(14f)))
        {
            Creature_Editor.Slot[(int)Assign_Slot.Primary_Hand] = (Equipment_Foundation)AssetDatabase.LoadAssetAtPath("Assets/Prefabs/System/Nothing/None_Hand_1H.prefab",typeof(Equipment_Foundation));
            Creature_Editor.Slot[(int)Assign_Slot.Secondary_Hand] = (Equipment_Foundation)AssetDatabase.LoadAssetAtPath("Assets/Prefabs/System/Nothing/None_Hand_1H.prefab",typeof(Equipment_Foundation));
            Creature_Editor.Slot[(int)Assign_Slot.Armor] = (Equipment_Foundation)AssetDatabase.LoadAssetAtPath("Assets/Prefabs/System/Nothing/None_Armor.prefab",typeof(Equipment_Foundation));
            Creature_Editor.Slot[(int)Assign_Slot.Arrow] = (Equipment_Foundation)AssetDatabase.LoadAssetAtPath("Assets/Prefabs/System/Nothing/None_Arrow.prefab",typeof(Equipment_Foundation));
        }
        EditorGUILayout.EndHorizontal ();
    }
 private void xForm_Warning(ref Equipment_Foundation Weapon_Editor)
 {
     Layout.Text("Name", ref Weapon_Editor.Name);
     Layout.Text("Description", ref Weapon_Editor.Description);
     EditorGUILayout.PropertyField(Class,true);
     EditorGUILayout.HelpBox("Please use Create -> xForm 1 or Create -> xForm 2. Equipment_Foundation (this class) does not support xForms",MessageType.Warning);
     serializedObject.ApplyModifiedProperties();
 }
 private void Notes(Equipment_Foundation Weapon_Editor)
 {
     Note_Foldout = EditorGUILayout.Foldout(Note_Foldout, "Notes");
     if (Note_Foldout)
     {
         EditorGUILayout.HelpBox("Use / to make a newline. When typing it is possible to type everything out first like: line1/line2/line3/etc and then press return.",MessageType.Info);
         Layout.Text(string.Empty,ref Weapon_Editor.Equipment_Notes,GUILayout.MaxHeight(200f));
         if (Weapon_Editor.Equipment_Notes.Contains("/") && !string.IsNullOrEmpty(Weapon_Editor.Equipment_Notes))
         {
             Weapon_Editor.Equipment_Notes = Weapon_Editor.Equipment_Notes.Replace("/","\n");
         }
     }
 }
 private void Display_Stat(string Name, ref Equipment_Foundation Weapon_Editor, Stat Choose_Stat)
 {
     EditorGUILayout.BeginHorizontal ();
     EditorGUILayout.FloatField(Name,Weapon_Editor.Get_Stat(Choose_Stat));
     Weapon_Editor.Stat_Multiplier[(int)Choose_Stat] = EditorGUILayout.FloatField(Weapon_Editor.Stat_Multiplier[(int)Choose_Stat],GUILayout.Width(50f));
     EditorGUILayout.EndHorizontal ();
     Weapon_Editor.Level_Up(Choose_Stat);
 }
    private void Display_Damage_Foldout(ref Equipment_Foundation Weapon_Editor)
    {
        if (Weapon_Editor.Class == Assign_Class.Armor || Weapon_Editor.Class == Assign_Class.Shield ||
                Weapon_Editor.Class == Assign_Class.xForm)
            {
                EditorGUILayout.LabelField("Hitpoints", EditorStyles.boldLabel);
                EditorGUI.indentLevel = EditorGUI.indentLevel + 1;
                EditorGUILayout.BeginHorizontal ();
                EditorGUILayout.FloatField("Hitpoints",Weapon_Editor.Get_Stat(Stat.Hitpoints));
                EditorGUILayout.LabelField("x" + Weapon_Editor.Level.ToString(),GUILayout.Width(48f));
                Weapon_Editor.Stat_Multiplier[(int)Stat.Hitpoints] = EditorGUILayout.FloatField(Weapon_Editor.Stat_Multiplier[(int)Stat.Hitpoints],GUILayout.Width(50f));
                EditorGUILayout.EndHorizontal ();
                Weapon_Editor.Level_Up(Stat.Hitpoints);
                EditorGUI.indentLevel = EditorGUI.indentLevel - 1;
            }
            else
            {
                Check_For_Wrong_Stats(ref Weapon_Editor,Stat.Hitpoints);
            }

         			EditorGUILayout.LabelField("Damage", EditorStyles.boldLabel);
            EditorGUI.indentLevel = EditorGUI.indentLevel + 1;
            Display_Stat("Melee Damage",ref Weapon_Editor,Stat.Melee_Damage);
            Display_Stat("Magic Damage",ref Weapon_Editor,Stat.Magic_Damage);
            Display_Stat("Archery Damage",ref Weapon_Editor,Stat.Archery_Damage);
            EditorGUI.indentLevel = EditorGUI.indentLevel - 1;

            EditorGUILayout.LabelField("Accuracy", EditorStyles.boldLabel);
            EditorGUI.indentLevel = EditorGUI.indentLevel + 1;
            Display_Stat("Accuracy",ref Weapon_Editor,Stat.Accuracy);
            Display_Stat("Evade",ref Weapon_Editor,Stat.Evade);
            EditorGUI.indentLevel = EditorGUI.indentLevel - 1;

            EditorGUILayout.LabelField("Critical", EditorStyles.boldLabel);
            EditorGUI.indentLevel = EditorGUI.indentLevel + 1;
            Layout.Float("Critical Damage", ref Weapon_Editor.Stat_Dictionary,Stat.Critical_Damage);
            Layout.Float("Critical Chance", ref Weapon_Editor.Stat_Dictionary,Stat.Critical_Chance);
            EditorGUI.indentLevel = EditorGUI.indentLevel - 1;

            EditorGUILayout.LabelField("Resistance", EditorStyles.boldLabel);
            EditorGUI.indentLevel = EditorGUI.indentLevel + 1;
            Layout.Float("Melee Resistance", ref Weapon_Editor.Stat_Dictionary,Stat.Melee_Resistance);
            Layout.Float("Magic Resistance", ref Weapon_Editor.Stat_Dictionary,Stat.Magic_Resistance);
            Layout.Float("Archery Resistance", ref Weapon_Editor.Stat_Dictionary,Stat.Archery_Resistance);
            EditorGUI.indentLevel = EditorGUI.indentLevel - 1;
    }
    protected void Default_Stats(ref Equipment_Foundation Weapon_Editor)
    {
        if (GUILayout.Button("Default Stats",GUILayout.Height(14f),GUILayout.Width(80f)))
        {
            switch (Weapon_Editor.Class)
            {
            case Assign_Class.Melee:
                if (Weapon_Editor.Subclass == Assign_Subclass.Sword)
                {
                    if (Weapon_Editor.Two_Handed == false)
                    {
                        Set_Default_Stats(ref Weapon_Editor,0f,1f,1f,1f,0,0,0,1f,1.5f,0f,0f,1f,.5f,0,0,0,0,0,0,15f);
                    }
                    else
                    {
                        Set_Default_Stats(ref Weapon_Editor,0f,1f,1f,1f,0,0,0,1f,4.5f,0f,0f,2f,0f,0,0,0,0,0,0,30f);
                    }
                }

                if (Weapon_Editor.Subclass == Assign_Subclass.Spear)
                {
                    Weapon_Editor.Two_Handed = true;
                    Set_Default_Stats(ref Weapon_Editor,0f,1f,1f,2f,0,0,0,1f,4.5f,0f,0f,2f,0f,0,0,0,0,0,0,30f);
                }
                break;
            case Assign_Class.Magic:
                if (Weapon_Editor.Subclass == Assign_Subclass.Wand)
                {
                    Weapon_Editor.Two_Handed = false;
                    Set_Default_Stats(ref Weapon_Editor,0f,1f,1f,5f,0,0,0,1f,0f,1f,0f,1f,.5f,20,40,5,5,5,0,20);
                }
                if (Weapon_Editor.Subclass == Assign_Subclass.Staff)
                {
                    Weapon_Editor.Two_Handed = true;
                    Set_Default_Stats(ref Weapon_Editor,0f,1f,1f,5f,0,0,0,1f,0f,3f,0f,2f,0f,60,80,10,10,10,0,30);
                }
                if (Weapon_Editor.Subclass == Assign_Subclass.Spellbook)
                {
                    Weapon_Editor.Class = Assign_Class.Shield;
                    Set_Default_Stats(ref Weapon_Editor,0f,0f,0f,0f,0,0,0,1f,0f,.2f,0f,.2f,1f,20,20,7.5f,7.5f,7.5f,0);
                }
                break;
            case Assign_Class.Archery:
                if (Weapon_Editor.Subclass == Assign_Subclass.Bow)
                {
                    Weapon_Editor.Two_Handed = true;
                    Set_Default_Stats(ref Weapon_Editor,0f,3f,4f,7f,0,0,0,1f,0f,0f,3f,3f,0f,0,0,0,0,0,0,10);
                }
                if (Weapon_Editor.Subclass == Assign_Subclass.Crossbow)
                {
                    Weapon_Editor.Two_Handed = false;
                    Set_Default_Stats(ref Weapon_Editor,0f,3f,3f,5f,0,0,0,1f,0f,0f,1f,1.5f,.5f,0,0,0,0,0,0,5);
                }
                break;
            case Assign_Class.Shield:
                if (Weapon_Editor.Class == Assign_Class.Shield && Weapon_Editor.Subclass == Assign_Subclass.None)
                {
                    Set_Default_Stats(ref Weapon_Editor,0f,0f,0f,0f,0,0,0,1f,0f,0f,0f,0f,1.5f,0,0,12.5f,12.5f,12.5f,.5f);
                }
                if (Weapon_Editor.Subclass == Assign_Subclass.Spellbook)
                {
                    Weapon_Editor.Class = Assign_Class.Shield;
                    Set_Default_Stats(ref Weapon_Editor,0f,0f,0f,0f,0,0,0,1f,0f,.2f,0f,.2f,1f,20,20,7.5f,7.5f,7.5f);
                }
                break;
            case Assign_Class.Armor:
                Weapon_Editor.Subclass = Assign_Subclass.None;
                Set_Default_Stats(ref Weapon_Editor,0f,0f,0f,0f,0,0,0,1f,0f,0f,0f,0f,0f,0,0,25f,25f,25f,1f);
                break;
            case Assign_Class.Ammo:
                Set_Default_Stats(ref Weapon_Editor,0f,0f,0f,0f,0,0,0,1f,0f,0f,0f,0f,0f,0,0,0f,0f,0f,0f);
                break;
            default:
                EditorGUILayout.HelpBox("This Class isn't supported",MessageType.Error);
                break;
            }
        }
    }
    private void Display_AOE_Foldout(ref Equipment_Foundation Weapon_Editor)
    {
        AOE_Foldout = EditorGUILayout.Foldout(AOE_Foldout, "Area of Effect");
        if (AOE_Foldout)
        {
            EditorGUILayout.BeginHorizontal();
            Layout.Float("Area of Effect",ref Weapon_Editor.Stat_Dictionary,Stat.Area_Of_Effect);
            if(GUILayout.Button("Show",GUILayout.Height(14f)))
          	{
                float Number_Of_Booleans = Mathf.Pow(Weapon_Editor.Get_Stat(Stat.Area_Of_Effect),2f);
                Weapon_Editor.AOE_Pattern = new List<bool>(new bool[(int)Number_Of_Booleans]);
                Weapon_Editor.AOE_Knockback_Direction = new List<Equipment_Foundation.AOE_Knockback_Direction_Enum>(new Equipment_Foundation.AOE_Knockback_Direction_Enum[(int)Number_Of_Booleans]);
                Weapon_Editor.AOE_Damage = new List<float>(new float[(int)Number_Of_Booleans]);
                Weapon_Editor.AOE_Hit_Order = new List<float>(new float[Weapon_Editor.AOE_Pattern.Count]);
            }
            EditorGUILayout.EndHorizontal();

            if (Weapon_Editor.Get_Stat(Stat.Area_Of_Effect) > 15)
            {
                Layout.Label("AOE is too high for the editor contact me if you want to");
                Layout.Label("do something nuts.");
                return;
            }

            if (Mathf.Sqrt((float)Weapon_Editor.AOE_Pattern.Count) != Weapon_Editor.Get_Stat(Stat.Area_Of_Effect)) return;
            AOE_Box_Layout (ref Weapon_Editor, AOE_Type_Enum.Pattern);
            AOE_Box_Layout (ref Weapon_Editor, AOE_Type_Enum.Damage);
            AOE_Box_Layout (ref Weapon_Editor, AOE_Type_Enum.Knockback_Direction);
            AOE_Box_Layout (ref Weapon_Editor, AOE_Type_Enum.Hit_Order);
        }
    }
    private void AOE_Box_Layout(ref Equipment_Foundation Weapon_Editor, AOE_Type_Enum AOE_Type)
    {
        if (Weapon_Editor.Get_Stat(Stat.Area_Of_Effect) > 0)
        {
            if (AOE_Type == AOE_Type_Enum.Pattern) EditorGUILayout.HelpBox("The center represents the enemy you clicked on to attack. Check off the areas you want the AOE to hit.",MessageType.Info);
            if (AOE_Type == AOE_Type_Enum.Damage) EditorGUILayout.HelpBox("Each box represents the % damage that will be dealt to the enemy. The percent is based off of your total damage when you attack.",MessageType.Info);
            if (AOE_Type == AOE_Type_Enum.Knockback_Direction) EditorGUILayout.HelpBox("The direction the enemy will go if you have knockback.",MessageType.Info);
            if (AOE_Type == AOE_Type_Enum.Hit_Order) EditorGUILayout.HelpBox("The order in which each enemy will be hit. This is mostly for knockback, as you would want it to be outer -> inner to avoid people bumping into each other",MessageType.Info);
        }

        if (Weapon_Editor.Get_Stat(Stat.Area_Of_Effect) > 0 && (Weapon_Editor.AOE_Damage.Count == 0 || Weapon_Editor.AOE_Knockback_Direction.Count == 0 || Weapon_Editor.AOE_Hit_Order.Count == 0))
        {
            Weapon_Editor.AOE_Knockback_Direction = new List<Equipment_Foundation.AOE_Knockback_Direction_Enum>(new Equipment_Foundation.AOE_Knockback_Direction_Enum[Weapon_Editor.AOE_Pattern.Count]);
            Weapon_Editor.AOE_Damage = new List<float>(new float[Weapon_Editor.AOE_Pattern.Count]);
            Weapon_Editor.AOE_Hit_Order = new List<float>(new float[Weapon_Editor.AOE_Pattern.Count]);
        }

        EditorGUILayout.BeginHorizontal();
        for (float i = 0; i < Weapon_Editor.AOE_Pattern.Count; i++)
        {
            if (i/Weapon_Editor.Get_Stat(Stat.Area_Of_Effect) == Mathf.Floor(i/Weapon_Editor.Get_Stat(Stat.Area_Of_Effect)) && i != 0)
            {
               EditorGUILayout.EndHorizontal();
               EditorGUILayout.BeginHorizontal();
            }

            if (AOE_Type == AOE_Type_Enum.Pattern)
            {
                Weapon_Editor.AOE_Pattern[(int)i] = EditorGUILayout.Toggle(Weapon_Editor.AOE_Pattern[(int)i],GUILayout.Width(12f));
            }

            if (AOE_Type != AOE_Type_Enum.Pattern)
            {
                if (Weapon_Editor.AOE_Pattern[(int)i])
                {
                    if (AOE_Type == AOE_Type_Enum.Damage) Weapon_Editor.AOE_Damage[(int)i] = EditorGUILayout.FloatField(Weapon_Editor.AOE_Damage[(int)i],GUILayout.Width(30f));
                    if (AOE_Type == AOE_Type_Enum.Knockback_Direction) Weapon_Editor.AOE_Knockback_Direction[(int)i] = (Equipment_Foundation.AOE_Knockback_Direction_Enum)EditorGUILayout.Popup(Weapon_Editor.AOE_Knockback_Direction[(int)i].toInt(),Arrow.Array,GUILayout.Width(30f));
                    if (AOE_Type == AOE_Type_Enum.Hit_Order) Weapon_Editor.AOE_Hit_Order[(int)i] = EditorGUILayout.FloatField(Weapon_Editor.AOE_Hit_Order[(int)i],GUILayout.Width(30f));

                }
                else
                {
                Layout.Label("",30f);
                }

            }
        }
        EditorGUILayout.EndHorizontal();
    }
    protected virtual void Display_Class_Stats(ref Equipment_Foundation Weapon_Editor)
    {
        EditorGUILayout.PropertyField(Class,true);
        if (Weapon_Editor.Class != Assign_Class.Armor)
        {
            EditorGUILayout.PropertyField(Subclass,true);
        }

        if (Weapon_Editor.Class != Assign_Class.Ammo && (Weapon_Editor.Subclass == Assign_Subclass.Arrow || Weapon_Editor.Subclass == Assign_Subclass.Bolt))
        {
            EditorGUILayout.HelpBox(Weapon_Editor.Class + " does not support the '" + Weapon_Editor.Subclass + "' subclass",MessageType.Warning);
        }

        if (Weapon_Editor.Class == Assign_Class.Melee ||
            Weapon_Editor.Class == Assign_Class.Magic ||
            Weapon_Editor.Class == Assign_Class.Archery ||
            Weapon_Editor.Class == Assign_Class.Shield)
        {
            Layout.Bool("Two Handed",ref Weapon_Editor.Two_Handed);
        }
        else
        {
            if (Weapon_Editor.Two_Handed)
            {
                EditorGUILayout.HelpBox("Two Handed is true",MessageType.Warning);
            }
        }
        Default_Stats(ref Weapon_Editor);
    }
Example #13
0
    //**************************************//
    //*************Start Attack*************//
    //**************************************//
    public void Initiate(Equipment_Foundation Weapon)
    {
        //**************************************//
         //*********Check For Non Weapons********//
        //**************************************//
        if (Is_Level_Damage_Resistance_Statable(Weapon.Class) == false)
        {
            Debug.Log(Weapon.Name + " was not run threw the attack code");
            return;
        }
          //****************************************//
         //*Calculate: Attack Count & Shield Bonus*//
        //****************************************//
        Number_Of_Attacks = Weapon.Get_Stat(Stat.Number_Of_Attacks);
        Shield_Bonus(Class_Damage,Class_Resistance);
          //**************************************//
         //***********Start Attack Loop**********//
        //**************************************//
            while (Attack_Count < Number_Of_Attacks)
            {
                Reset_Stats();
          //**************************************//
         //*******Passive Attack Begin 1/4*******//
        //**************************************//
                Passives (Creature, State.Attack_Begin);
                Passives (Advisory, State.Attack_Begin);

          //**************************************//
         //******Calculate: Number of Attacks****//
        //**************************************//
                Number_Of_Attacks = Weapon.Get_Stat(Stat.Number_Of_Attacks);

          //**************************************//
         //*********Calculate: Accuracy**********//
        //**************************************//
                //Enforce a primary or secondary system or have some way where shields commincate to the weapon or something??????? Maybe shields have a passive that's run or something?????
                float Class_Accuracy = Tier.Formula(Creature.Get_Stat(Class_Level));
                float Weapon_Accuracy = Weapon.Get_Stat(Stat.Accuracy);
                float Armor_Accuracy = Creature.Slot[Assign_Slot.Armor.toInt()].Get_Stat(Stat.Accuracy);
                float Creature_Accuracy = Class_Accuracy + Weapon_Accuracy + Armor_Accuracy + Shield_Accuracy;

                float Advisory_Primary_Evade = Advisory.Slot[Assign_Slot.Primary_Hand.toInt()].Get_Stat(Stat.Evade);
                float Advisory_Secondary_Evade = Advisory.Slot[Assign_Slot.Secondary_Hand.toInt()].Get_Stat(Stat.Evade);
                float Advisory_Weapon_Evade = Advisory_Primary_Evade + Advisory_Secondary_Evade;
                float Advisory_Armor_Evade =  Advisory.Slot[Assign_Slot.Armor.toInt()].Get_Stat(Stat.Evade);
                float Advisory_Class_Level_Evade = Tier.Formula(Advisory.Get_Stat(Class_Level));
                float Advisory_Evade = Advisory_Weapon_Evade + Advisory_Armor_Evade + Advisory_Class_Level_Evade;

                Accuracy = 50f * (Creature_Accuracy/Advisory_Evade) * Accuracy_Bonus_Multiplier.Multiple();
          //**************************************//
         //******Calculate: Base Damage**********//
        //**************************************//
                if (Dual_Wield_Equipped ())
                {
                    float Armor_Damage = Creature.Slot[Assign_Slot.Armor.toInt()].Get_Stat(Class_Damage);
                    float Class_Level_Damage = Tier.Formula(Creature.Get_Stat(Class_Level));
                    float All_Damage = Weapon.Get_Stat(Class_Damage) + (Armor_Damage * .5f) + (Class_Level_Damage * .5f);
                    Base_Damage = (All_Damage * Damage_Bonus_Multiplier.Multiple()) / Number_Of_Attacks;
                }
                else
                {
                    float Armor_Damage = Creature.Slot[Assign_Slot.Armor.toInt()].Get_Stat(Class_Damage);
                    float Class_Level_Damage = Tier.Formula(Creature.Get_Stat(Class_Level));
                    float All_Damage = Weapon.Get_Stat(Class_Damage) + (Armor_Damage) + (Class_Level_Damage) + Shield_Damage;
                    Base_Damage = (All_Damage * Damage_Bonus_Multiplier.Multiple()) / Number_Of_Attacks;
                }
          //**************************************//
         //*****Calculate: Critical Damage*******//
        //**************************************//
                float  Critical_Damage_Percent = 0f;
                Critical_Chance = Weapon.Get_Stat(Stat.Critical_Chance) + Critical_Chance_Bonus_Additive.Sum() + Shield_Critical_Chance;
                Critical_Chance *= Critical_Chance_Bonus_Multiplier.Multiple();
                if (Critical_Chance >= UnityEngine.Random.Range(0f,100f))
                {
                    Critical_Damage_Percent = (Weapon.Get_Stat(Stat.Critical_Damage) + Critical_Damage_Bonus_Additive.Sum()) + Shield_Critical_Damage / 100;
                    Critical_Damage_Percent *= Critical_Damage_Bonus_Multiplier.Multiple();
                }
                Critical_Damage = Base_Damage * Critical_Damage_Percent;
          //**************************************//
         //*****Calculate: Resistance Damage*****//
        //**************************************//
                float Resistance_Percent = (Creature.Get_Stat(Class_Resistance) + Resistance_Bonus_Additive.Sum()) / 100 * Resistance_Bonus_Multiplier.Multiple();
                Resistance = Base_Damage * Resistance_Percent;

          //**************************************//
         //*****Calculate: Total Damage**********//
        //**************************************//
                Damage = Critical_Damage + Base_Damage - Resistance;

          //**************************************//
         //**************Dice Roll***************//
        //**************************************//
                if (Accuracy >= UnityEngine.Random.Range(0f,100f))
                {
          //**************************************//
         //*******Passive Attack Hit 2/4*********//
        //**************************************//
                    Passives (Creature, State.Attack_Hit);
                    Passives (Advisory, State.Counter_Attack_Hit);

          //**************************************//
         //******Calculate: Adversary - Damage***//
        //**************************************//
                    Damage = Mathf.Floor(Damage);
                    Advisory.Get_Stat(Stat.Hitpoints,-Damage);

          //**************************************//
         //***********Calculate: Energy**********//
        //**************************************//
                    Energy = (Weapon.Get_Stat(Stat.Energy) + Energy_Bonus_Additive.Sum()) * Energy_Bonus_Multiplier.Multiple();
                    Energy *= Dont_Negate_Energy.toFloat();
                    Creature.Get_Stat(Stat.Energy, Energy);

                    if (Creature.Get_Stat(Stat.Energy) > 100)
                    {
                        Creature.Get_Stat(Stat.Energy, 100, true);
                    }
                    if (Creature.Get_Stat(Stat.Energy) < 0)
                    {
                        Creature.Get_Stat(Stat.Energy, 0, true);
                    }

                    if (Weapon.Defect != Defect.None)
                    {
        //						Advisory.gameObject.AddComponent()
                    }

                }
                else
                {
          //**************************************//
         //********Passive Attack Miss 3/4*******//
        //**************************************//
                    Passives (Creature, State.Attack_Miss);
                    Passives (Advisory, State.Counter_Attack_Miss);
                    Debug.Log(Creature.Name + ": Missed!");
                }
          //**************************************//
         //********Passive Attack End 4/4********//
        //**************************************//
                Passives (Creature, State.Attack_End);
                Passives (Advisory, State.Counter_Attack_End);
                Attack_Count++;
            }
          //**************************************//
         //**************End Loop****************//
        //**************************************//
    }
    private void Set_Default_Stats(ref Equipment_Foundation Weapon_Editor, float Area_Of_Effect, float Number_Of_Attacks,
		float Minimum_Distance, float Maximum_Distance, float Movement, float Jump, float Knockback, float Level, float Melee_Multiplier,
		float Magic_Multiplier, float Archery_Multiplier, float Accuracy, float Evade, float Critical_Damage, float Critical_Chance, float Melee_Resistance,
		float Magic_Resistance, float Archery_Resistance,float Hitpoints_Multiplier = 0f, float Energy = 0f, Defect Defect = Defect.None)
    {
        Weapon_Editor.Get_Stat(Stat.Area_Of_Effect,Area_Of_Effect,true);
        Weapon_Editor.Get_Stat(Stat.Number_Of_Attacks,Number_Of_Attacks,true);
        Weapon_Editor.Get_Stat(Stat.Minimum_Distance,Minimum_Distance,true);
        Weapon_Editor.Get_Stat(Stat.Maximum_Distance,Maximum_Distance,true);
        Weapon_Editor.Get_Stat(Stat.Movement,Movement,true);
        Weapon_Editor.Get_Stat(Stat.Jump,Jump,true,true);
        Weapon_Editor.Get_Stat(Stat.Knockback,Knockback,true);
        Weapon_Editor.Level = Level;
        Weapon_Editor.Stat_Multiplier[(int)Stat.Melee_Damage] = Melee_Multiplier;
        Weapon_Editor.Stat_Multiplier[(int)Stat.Magic_Damage] = Magic_Multiplier;
        Weapon_Editor.Stat_Multiplier[(int)Stat.Archery_Damage] = Archery_Multiplier;
        Weapon_Editor.Stat_Multiplier[(int)Stat.Accuracy] = Accuracy;
        Weapon_Editor.Stat_Multiplier[(int)Stat.Evade] = Evade;
        Weapon_Editor.Get_Stat(Stat.Critical_Damage,Critical_Damage,true,true);
        Weapon_Editor.Get_Stat(Stat.Critical_Chance,Critical_Chance,true,true);
        Weapon_Editor.Get_Stat(Stat.Melee_Resistance,Melee_Resistance,true,true);
        Weapon_Editor.Get_Stat(Stat.Magic_Resistance,Magic_Resistance,true,true);
        Weapon_Editor.Get_Stat(Stat.Archery_Resistance,Archery_Resistance,true,true);
        Weapon_Editor.Get_Stat(Stat.Energy,Energy,true,true);
        Weapon_Editor.Stat_Multiplier[(int)Stat.Hitpoints] = Hitpoints_Multiplier;
        Weapon_Editor.Defect = Defect;
        Weapon_Editor.Passives.Clear();
    }
Example #15
0
 private void Level_Up_Equipment(ref Equipment_Foundation Equipment, float Change_All_Levels)
 {
     Equipment.Level = Change_All_Levels;
     Equipment.Level_Up(Stat.Hitpoints);
     Equipment.Level_Up(Stat.Melee_Damage);
     Equipment.Level_Up(Stat.Magic_Damage);
     Equipment.Level_Up(Stat.Archery_Damage);
     Equipment.Level_Up(Stat.Accuracy);
     Equipment.Level_Up(Stat.Evade);
 }
    private void Display_Config_Foldout(ref Equipment_Foundation Weapon_Editor)
    {
        Config_Foldout = EditorGUILayout.Foldout(Config_Foldout, "Config");

        if (Config_Foldout)
        {
            if (Weapon_Editor.Class == Assign_Class.Melee || Weapon_Editor.Class == Assign_Class.Magic || Weapon_Editor.Class == Assign_Class.Archery)
            {
                Layout.Float("Energy",ref Weapon_Editor.Stat_Dictionary,Stat.Energy);
            }
            Layout.Float("Number of Attacks",ref Weapon_Editor.Stat_Dictionary,Stat.Number_Of_Attacks);
            Layout.Float("Minimum Distance",ref Weapon_Editor.Stat_Dictionary,Stat.Minimum_Distance);
            Layout.Float("Maximum Distance",ref Weapon_Editor.Stat_Dictionary,Stat.Maximum_Distance);
            Layout.Float("Movement", ref Weapon_Editor.Stat_Dictionary, Stat.Movement);
            Layout.Float("Jump", ref Weapon_Editor.Stat_Dictionary, Stat.Jump);
            Layout.Float("Knockback", ref Weapon_Editor.Stat_Dictionary, Stat.Knockback);
        }
    }
 protected override void Display_Class_Stats(ref Equipment_Foundation Weapon_Editor)
 {
     Layout.Horizontal(xForm_Class_Stats);
     Layout.Horizontal(xForm_Subclass_Stats);
 }