Example #1
0
    public void AttrSpeedPlus(ActiveAbility ability, AbilityAttribute attr)
    {
        var degree   = (float)attr.FindParameter("degree").value;
        var duration = (float)attr.FindParameter("duration").value;

        FindTarget().GetComponent <StatusEffectHost>().AddStatusEffect("speed+", duration, degree, good: true);
    }
Example #2
0
    private static string BoostStatDescription(Ability ability, AbilityAttribute attribute)
    {
        switch ((string)attribute.FindParameter("stat").value)
        {
        case "strength":
            return("Increases Strength by " + attribute.FindParameter("degree").value.ToString() + ".\n");

        case "dexterity":
            return("Increases Dexterity by " + attribute.FindParameter("degree").value.ToString() + ".\n");

        case "constitution":
            return("Increases Constitution by " + attribute.FindParameter("degree").value.ToString() + ".\n");

        case "intelligence":
            return("Increases Intelligence by " + attribute.FindParameter("degree").value.ToString() + ".\n");

        case "wisdom":
            return("Increases Wisdom by " + attribute.FindParameter("degree").value.ToString() + ".\n");

        case "luck":
            return("Increases Luck by " + attribute.FindParameter("degree").value.ToString() + ".\n");

        default:
            return("Increases UNKNOWN ATTRIBUTE by " + attribute.FindParameter("degree").value.ToString() + ".\n");
        }
    }
 public static AbilityAttribute Generate(UtilityAbility ability)
 {
     for (int i = 0; i < 10000; i++)
     {
         string           roll = TableRoller.Roll("UtilityAttributes_" + ability.targetType);
         AbilityAttribute attribute;
         if (simpleAttributes.Contains(roll))
         {
             attribute = new AbilityAttribute {
                 type = roll
             };
             attribute.priority = UnityEngine.Random.Range(12.5f, 100f);
             attribute.points   = AbilityAttributeAppraiser.Appraise(ability, attribute);
             if (negativeAttributes.Contains(attribute.type) && attribute.priority < 50)
             {
                 continue;
             }
             return(attribute);
         }
         attribute = attributes[roll](ability);
         if (attribute != null)
         {
             attribute.priority = UnityEngine.Random.Range(12.5f, 100f);
             attribute.points   = AbilityAttributeAppraiser.Appraise(ability, attribute);
             if (negativeAttributes.Contains(attribute.type) && attribute.priority < 50)
             {
                 continue;
             }
             return(attribute);
         }
     }
     Debug.Log("FAILED TO FIND VALID ATTRIBUTE FOR ABILITY!");
     return(null);
 }
Example #4
0
    public void AttrHealAll(ActiveAbility ability, AbilityAttribute attr)
    {
        float factor = 10;

        if (GetComponent <PlayerCharacter>() != null)
        {
            factor *= GetComponent <PlayerCharacter>().weapon.attackPower;
        }
        else
        {
            factor *= GetComponent <Monster>().attackFactor;
        }
        int level = 1;

        if (GetComponent <ExperienceGainer>() != null)
        {
            level = GetComponent <ExperienceGainer>().level;
        }
        else
        {
            level = GetComponent <MonsterScaler>().level;
        }
        //factor *= SecondaryStatUtility.CalcHealingMultiplier(GetComponent<Character>().wisdom, level);
        factor *= CharacterAttribute.attributes["healingMultiplier"].instances[GetComponent <Character>()].TotalValue / 100f;
        //var healingAmount = (int)((float)attr.FindParameter("degree").value * factor * FindTarget().GetComponent<Health>().healingMultiplier);
        var healingAmount = (int)((float)attr.FindParameter("degree").value *factor *CharacterAttribute.attributes["receivedHealing"].instances[FindTarget()].TotalValue / 100f);

        //foreach (var monster in Monster.monsters) if (monster.GetComponent<MonsterCombatant>().InCombat()) monster.GetComponent<Health>().Heal(healingAmount);
        foreach (var monster in Monster.monsters)
        {
            monster.GetComponent <Health>().Heal(healingAmount);                                      // temp
        }
        GetComponent <AudioGenerator>().PlaySoundByName("sfx_magic_heal2");
    }
Example #5
0
    private static string SpeedMinusDescription(AttackAbility ability, AbilityAttribute attribute)
    {
        var degree   = (int)(((float)attribute.FindParameter("degree").value) * 100f);
        var duration = (float)attribute.FindParameter("duration").value;

        return("Slow target's movement by " + degree.ToString() + "% for " + Mathf.FloorToInt(duration).ToString() + " seconds.\n");
    }
    public static void SpeedMinus(Character target, AbilityAttribute attr)
    {
        var degree   = (float)attr.FindParameter("degree").value;
        var duration = (float)attr.FindParameter("duration").value;

        target.GetComponent <StatusEffectHost>().AddStatusEffect("speed-", duration, degree);
    }
Example #7
0
 public static AbilityAttribute Generate(AttackAbility ability, string attributeType)
 {
     for (int i = 0; i < 10000; i++)
     {
         AbilityAttribute attribute;
         if (simpleAttributes.Contains(attributeType))
         {
             attribute = new AbilityAttribute {
                 type = attributeType
             };
             attribute.priority = UnityEngine.Random.Range(12.5f, 100f);
             attribute.points   = AbilityAttributeAppraiser.Appraise(ability, attribute);
             if (negativeAttributes.Contains(attribute.type) && attribute.priority < 50)
             {
                 continue;
             }
             return(attribute);
         }
         attribute = attributes[attributeType](ability);
         if (attribute != null)
         {
             attribute.priority = UnityEngine.Random.Range(12.5f, 100f);
             attribute.points   = AbilityAttributeAppraiser.Appraise(ability, attribute);
             if (negativeAttributes.Contains(attribute.type) && attribute.priority < 50)
             {
                 continue;
             }
             return(attribute);
         }
     }
     Debug.Log("FAILED TO FIND VALID ATTRIBUTE FOR ABILITY!");
     return(null);
 }
Example #8
0
    public void AttrParalyze(ActiveAbility ability, AbilityAttribute attr)
    {
        if (!(ability is UtilityAbility))
        {
            return;
        }
        var   duration = (float)attr.FindParameter("duration").value;
        float radius   = 0;

        if (attr.FindParameter("radius") != null)
        {
            radius = (float)attr.FindParameter("radius").value * 3;
        }
        var utilityAbility = (UtilityAbility)ability;
        List <StatusEffectHost> targets = new List <StatusEffectHost>();

        if (utilityAbility.targetType == "none" && radius > 0)
        {
            targets = GetTargetsWithinRadiusOfPoint(transform.position, radius);
        }
        else if (utilityAbility.targetType == "point" && radius > 0 && GetMouseCursorTargetLocation() != Vector3.positiveInfinity)
        {
            targets = GetTargetsWithinRadiusOfPoint(GetMouseCursorTargetLocation(), radius);
        }
        else if (utilityAbility.targetType == "point" && radius == 0 && GetMouseCursorTargetCharacter() != null)
        {
            targets.Add(GetMouseCursorTargetCharacter());
        }
        foreach (var target in targets)
        {
            target.AddStatusEffect("paralysis", (float)attr.FindParameter("duration").value, inflicter: GetComponent <Character>(), good: false, ability: ability);
        }
    }
Example #9
0
    public void AttrSelfDestruct(ActiveAbility ability, AbilityAttribute attr)
    {
        var damage = GetComponent <Attacker>().CalculateAttackDamage((AttackAbility)ability) * ((AttackAbility)ability).damage;

        Damage.CreateAoe(GetComponent <Character>(), gameObject, (AttackAbility)ability, ability.attributes, (int)damage, 4, "Enemy");
        Destroy(gameObject, 0.2f);
    }
Example #10
0
 public static AbilityAttribute Generate(PassiveAbility ability, string attributeType)
 {
     for (int i = 0; i < 10000; i++)
     {
         AbilityAttribute attribute;
         if (simpleAttributes.Contains(attributeType))
         {
             attribute = new AbilityAttribute {
                 type = attributeType
             };
             attribute.priority = RNG.Float(12.5f, 100f);
             attribute.points   = AbilityAttributeAppraiser.Appraise(ability, attribute);
             return(attribute);
         }
         attribute = attributes[attributeType](ability);
         if (attribute != null)
         {
             attribute.priority = RNG.Float(12.5f, 100f);
             attribute.points   = AbilityAttributeAppraiser.Appraise(ability, attribute);
             return(attribute);
         }
     }
     Debug.Log("FAILED TO FIND VALID ATTRIBUTE FOR ABILITY!");
     return(null);
 }
Example #11
0
    private static float GetSpeedPlus(UtilityAbility ability, AbilityAttribute attribute)
    {
        var degree   = (float)attribute.FindParameter("degree").value;
        var duration = (float)attribute.FindParameter("duration").value;

        return(86f * duration / 5f * degree);
    }
Example #12
0
    private static float GetParalyze(UtilityAbility ability, AbilityAttribute attribute)
    {
        var   duration = (float)attribute.FindParameter("duration").value;
        float radius   = 0f;

        if (attribute.ContainsAttribute("radius"))
        {
            radius = (float)attribute.FindParameter("radius").value;
        }
        var pointCost = 280f * duration / 10f;

        if (radius == 2)
        {
            pointCost *= 2f;
        }
        else if (radius == 4)
        {
            pointCost *= 8f;
        }
        else if (radius == 6)
        {
            pointCost *= 18f;
        }
        else
        {
            pointCost *= 32f;
        }
        return(pointCost);
    }
Example #13
0
    private static float GetSpeedMinus(AttackAbility ability, AbilityAttribute attribute)
    {
        var degree   = (float)attribute.FindParameter("degree").value;
        var duration = (float)attribute.FindParameter("duration").value;

        return(ability.points * degree / 10f * duration);
    }
Example #14
0
    public static void Knockback(Character attacker, Character target, AbilityAttribute attr)
    {
        float degree = (float)attr.FindParameter("degree").value;
        var   obj    = target.gameObject.AddComponent <PushingEffect>();

        obj.Initialize(target.transform.position + attacker.transform.forward * degree, 0.25f);
        target.GetComponent <AbilityUser>().AddPushingEffect(target.transform.position + attacker.transform.forward * degree, 0.25f);
    }
Example #15
0
    public void AttrTimestop(ActiveAbility ability, AbilityAttribute attr)
    {
        var    duration = (float)attr.FindParameter("duration").value;
        var    radius   = ability.radius;
        string tag      = GetComponent <Character>().oppositeFaction;

        AddStatusEffectToAllWithTag(tag, "paralysis", duration, distance: radius);
    }
Example #16
0
    private string GetDotText(AbilityAttribute attribute, int baseAttributeScore)
    {
        var text = GetDotDamage(attribute, baseAttributeScore).ToString();

        text += " over ";
        text += GetDotSeconds(attribute).ToString() + " s";
        return(text);
    }
Example #17
0
    public static void Lifeleech(Character attacker, Character target, float damage, AbilityAttribute attr)
    {
        var amount = damage * (float)attr.FindParameter("degree").value;

        attacker.GetComponent <Health>().Heal(amount);
        GameObject obj    = GameObject.Instantiate(attacker.GetComponent <CacheGrabber>().spellEffects[0]);
        var        script = obj.GetComponent <LifeleechScript>();

        script.vampire = attacker.transform;
        script.victim  = target.transform;
    }
Example #18
0
    public static void Blind(Character attacker, Character target, AbilityAttribute attr)
    {
        target.GetComponent <StatusEffectHost>().AddStatusEffect("blind", (float)attr.FindParameter("duration").value, inflicter: attacker);
        var name = target.gameObject.name;

        if (name == "kittenCharacter(Clone)")
        {
            name = "Player";
        }
        target.GetComponent <ObjectSpawner>().CreateFloatingStatusText("Blinded!", name + " has been blinded!");
    }
Example #19
0
    public static void JumpBack(Character attacker, Character target, AbilityAttribute attr)
    {
        if (attr.FindParameter("degree") == null)
        {
            return;
        }
        var degree = (float)attr.FindParameter("degree").value;
        var obj    = attacker.gameObject.AddComponent <PushingEffect>();

        obj.Initialize(attacker.transform.position - attacker.transform.forward * degree, 0.5f);
        attacker.GetComponent <AbilityUser>().RpcAddPushingEffect(target.transform.position - attacker.transform.forward * degree, 0.5f);
    }
Example #20
0
    public static SavedAbilityAttribute ConvertFrom(AbilityAttribute attribute)
    {
        var obj = new SavedAbilityAttribute {
            type     = attribute.type,
            points   = attribute.points,
            priority = attribute.priority
        };

        foreach (var parameter in attribute.parameters)
        {
            obj.parameters.Add(SavedAbilityParameter.ConvertFrom(parameter));
        }
        return(obj);
    }
Example #21
0
    public static void PullTowards(Character attacker, Character target, AbilityAttribute attr)
    {
        if (attr.FindParameter("degree") == null)
        {
            return;
        }
        float distance = (float)attr.FindParameter("degree").value;

        if (distance >= 1 && distance <= 10)
        {
            var obj = target.gameObject.AddComponent <PushingEffect>();
            obj.Initialize(target.transform.position - attacker.transform.forward * (distance - 1), 0.5f);
            target.GetComponent <AbilityUser>().RpcAddPushingEffect(target.transform.position - attacker.transform.forward * (distance - 1), 0.5f);
        }
    }
    public AbilityAttribute Copy()
    {
        var newAttribute = new AbilityAttribute {
            type       = type,
            points     = points,
            priority   = priority,
            parameters = new List <AbilityAttributeParameter>()
        };

        foreach (var parameter in parameters)
        {
            newAttribute.parameters.Add(parameter.Copy());
        }
        return(newAttribute);
    }
Example #23
0
 public static float Appraise(PassiveAbility ability, AbilityAttribute attribute)
 {
     if (simplePassiveValues.ContainsKey(attribute.type))
     {
         return(simplePassiveValues[attribute.type]);
     }
     else if (simplePassiveMultipliers.ContainsKey(attribute.type))
     {
         return(simplePassiveMultipliers[attribute.type] * ability.points);
     }
     else if (complexPassiveMethods.ContainsKey(attribute.type))
     {
         return(complexPassiveMethods[attribute.type](ability, attribute));
     }
     return(1000000000);
 }
Example #24
0
    private static float GetInflictVulnerability(AttackAbility ability, AbilityAttribute attribute)
    {
        var degree = (float)attribute.FindParameter("degree").value;

        if (degree == 100)
        {
            return(ability.points * 0.75f);
        }
        else if (degree == 50)
        {
            return(ability.points * 0.5f);
        }
        else
        {
            return(ability.points * 0.25f);
        }
    }
Example #25
0
    private static float GetElementalDamageBuff(UtilityAbility ability, AbilityAttribute attribute)
    {
        var damageBoost = (float)attribute.FindParameter("degree").value;

        if (damageBoost == 100)
        {
            return(140f);
        }
        else if (damageBoost == 50)
        {
            return(70f);
        }
        else
        {
            return(35);
        }
    }
Example #26
0
    private static float GetElementalDamageBuff(AttackAbility ability, AbilityAttribute attribute)
    {
        var damageBoost = (float)attribute.FindParameter("degree").value;

        if (damageBoost == 100)
        {
            return(ability.points * 0.06f);
        }
        else if (damageBoost == 50)
        {
            return(ability.points * 0.03f);
        }
        else
        {
            return(ability.points * 0.01f);
        }
    }
Example #27
0
    private static string ParalyzeDescription(Ability ability, AbilityAttribute attribute)
    {
        var utilityAbility = ability as UtilityAbility;

        if (utilityAbility.targetType == "none")
        {
            return("Paralyze all enemies within radius " + Mathf.FloorToInt((float)attribute.FindParameter("radius").value).ToString() + " for " + Mathf.FloorToInt((float)attribute.FindParameter("duration").value).ToString() + " seconds.\n");
        }
        else if (utilityAbility.targetType == "point" && attribute.FindParameter("radius") != null)
        {
            return("Paralyze all enemies within radius " + Mathf.FloorToInt((float)attribute.FindParameter("radius").value).ToString() + " of targeted point for " + Mathf.FloorToInt((float)attribute.FindParameter("duration").value).ToString() + " seconds.\n");
        }
        else
        {
            return("Paralyze targeted enemy for " + Mathf.FloorToInt((float)attribute.FindParameter("duration").value).ToString() + " seconds.\n");
        }
    }
Example #28
0
    private static string SpeedMinusDescription(Ability ability, AbilityAttribute attribute)
    {
        var utilityAbility = ability as UtilityAbility;

        if (utilityAbility.targetType == "none")
        {
            return("Slows all enemies within radius " + Mathf.FloorToInt((float)(attribute.FindParameter("radius").value)).ToString() + " by " + Mathf.FloorToInt((float)attribute.FindParameter("degree").value * 100f).ToString() + "% for " + Mathf.FloorToInt((float)attribute.FindParameter("duration").value).ToString() + " seconds.\n");
        }
        else if (utilityAbility.targetType == "point" && attribute.FindParameter("radius") != null)
        {
            return("Slows all enemies within radius " + Mathf.FloorToInt((float)attribute.FindParameter("radius").value).ToString() + " of targeted point by " + Mathf.FloorToInt((float)attribute.FindParameter("degree").value * 100f).ToString() + "% for " + Mathf.FloorToInt((float)attribute.FindParameter("duration").value).ToString() + " seconds.\n");
        }
        else
        {
            return("Slows targeted enemy by " + Mathf.FloorToInt((float)attribute.FindParameter("degree").value * 100f).ToString() + "% for " + Mathf.FloorToInt((float)attribute.FindParameter("duration").value).ToString() + " seconds.\n");
        }
    }
Example #29
0
    private static AbilityAttribute SquashAttributes(AbilityAttribute attr1, AbilityAttribute attr2)
    {
        var attr1Copy = attr1.Copy();
        var attr2Copy = attr2.Copy();

        attr1Copy.points   = ((attr1Copy.points + attr2Copy.points) / 2) * Mathf.Pow(1.05f, 3);
        attr1Copy.priority = attr1Copy.points + attr2Copy.points;
        foreach (var param in attr1Copy.parameters)
        {
            var param2 = attr2Copy.FindParameter(param.name);
            if (param.value is float)
            {
                param.value = ((float)param.value + (float)param2.value) / 2f;
            }
            else if (param.value is int)
            {
                param.value = ((int)param.value + (int)param2.value) / 2;
            }
        }
        return(attr1Copy);
    }
    private static int BoostStatIcon(AbilityAttribute attribute)
    {
        var stat      = attribute.FindParameter("stat").value as string;
        var statTable = new Dictionary <string, int> {
            ["strength"]     = 74,
            ["dexterity"]    = 5,
            ["constitution"] = 48,
            ["intelligence"] = 55,
            ["wisdom"]       = 75,
            ["luck"]         = 76
        };

        if (statTable.ContainsKey(stat))
        {
            return(statTable[stat]);
        }
        else
        {
            return(0);
        }
    }