Exemplo n.º 1
0
    public void setPrimaryLabel()
    {
        if (primary_label == null)
        {
            return;
        }


        MyText primary_desc = primary_label.getText(LabelName.Null);

        string text = StaticRune.getPrimaryDescription(parent.rune);

        setVerboseImageLabels(primary_label, StaticRune.getPrimaryDamageType(parent.rune));

        if (text.Equals(""))
        {
            primary_label.gameObject.SetActive(false);
            return;
        }
        else
        {
            primary_label.gameObject.SetActive(true);
            primary_desc.setText(text);
        }


        MyText tower_name = primary_label.getText(LabelName.Name);

        string my_name = StaticRune.getProperName(parent);

        tower_name.setText(my_name);
    }
Exemplo n.º 2
0
    //1 is fully defended
    public float HurtMe(StatSum statsum, Firearm firearm, EffectType primary_effecttype, int primary_level)
    {
        if (dying)
        {
            return(0);
        }
        if (checkIfWasKilled())
        {
            return(0);
        }

        float factor = statsum.factor;//does anybody know what this is for? laser?
        float defense;
        float xp = 0f;



        StatBit[] statbits = statsum.stats;


        for (int i = 0; i < statbits.Length; i++)
        {
            StatBit skill_stats = statbits[i];
            if (statbits[i].effect_type == EffectType.Range)
            {
                continue;
            }
            if (statbits[i].effect_type == EffectType.ReloadTime)
            {
                continue;
            }

            switch (statsum.runetype)
            {
            case RuneType.Sensible:
                bool is_laser = (statsum.GetStatBit(EffectType.Laser) != null);

                if (is_laser)
                {
                    defense = Get.GetDefense(defenses, EffectType.Force);
                    if (statbits[i].effect_type == EffectType.Laser && defense < 1)
                    {
                        float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, defense)));
                        xp += add;
                        assignXp(add, firearm, primary_effecttype, EffectType.Laser, primary_level, skill_stats.level);
                    }
                }
                else
                {
                    if (statbits[i].effect_type == EffectType.Stun)
                    {
                        float add = StunMe(skill_stats.getModifiedStats(factor, 0)) / 10f;
                        xp += add;
                        assignXp(add, firearm, primary_effecttype, EffectType.Stun, primary_level,
                                 skill_stats.level);
                    }

                    if (statbits[i].effect_type == EffectType.Transform)
                    {
                        defense = Get.GetDefense(defenses, EffectType.Transform);
                        //applied with diffuse, which has a factor. this is not susceptible to that factor
                        if (defense < 1)
                        {
                            TransformMe(skill_stats.getModifiedStats(factor, defense), factor);
                        }
                    }

                    float force_defense = Get.GetDefense(defenses, EffectType.Force);
                    if (force_defense < 1)
                    {
                        if (statbits[i].effect_type == EffectType.Force)
                        {
                            //                   Debug.Log("factor " + statsum.factor + "\n");
                            float add = stats.getXp(ForceMe(statsum.getModifiedPrimaryStats(force_defense)));
                            xp += add;
                            assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level);
                        }


                        if (statbits[i].effect_type == EffectType.Explode_Force)
                        {
                            float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, force_defense)));
                            xp += add;
                            assignXp(add, firearm, primary_effecttype, EffectType.Explode_Force, primary_level, skill_stats.level);
                        }
                    }


                    if (statbits[i].effect_type == EffectType.Speed && statbits[i].effect_sub_type == EffectSubType.Ultra)
                    {
                        float add = SpeedMe(skill_stats.getModifiedStats(factor, 0), statbits[i].effect_type, statbits[i].effect_sub_type);
                        xp += add * (1 + firearm.toy.rune.level * 0.5f);
                        assignXp(add, firearm, primary_effecttype, EffectType.Meteor, primary_level, skill_stats.level);
                    }
                }

                break;

            case RuneType.Airy:

                if (statbits[i].effect_type == EffectType.Weaken)
                {
                    defense = (statbits[i].effect_sub_type == EffectSubType.Null) ? Get.GetDefense(defenses, EffectType.Weaken) : 0;
                    if (defense < 1)
                    {
                        float add = WeakenMe(skill_stats.getModifiedStats(factor, defense));
                        xp += add;
                        assignXp(add, firearm, primary_effecttype, EffectType.Weaken, primary_level, skill_stats.level);
                    }
                }


                float speed_defense = Get.GetDefense(defenses, EffectType.Speed) / 2f;   //otherwise they seem like they are very resistant to speed
                if (statbits[i].effect_type == EffectType.Speed && speed_defense < 1)
                {
                    float add = SpeedMe(skill_stats.getModifiedStats(factor, speed_defense), statbits[i].effect_type, statbits[i].effect_sub_type);     //this xp factor is to balance out xp to  match other towers that do more damage
                    xp += add;

                    assignXp(add, firearm, primary_effecttype, EffectType.Speed, primary_level, skill_stats.level);
                }

                if (statbits[i].effect_type == EffectType.Speed && statbits[i].effect_sub_type == EffectSubType.Freeze)
                {
                    float add = SpeedMe(skill_stats.getModifiedStats(factor, 0), statbits[i].effect_type, statbits[i].effect_sub_type);
                    //  Debug.Log("timefreeze factor is " + factor + "\n");
                    xp += add;
                    assignXp(add, firearm, primary_effecttype, EffectType.Frost, primary_level, skill_stats.level);
                }


                float hey_defense = Get.GetDefense(defenses, EffectType.Force);
                if (statbits[i].effect_type == EffectType.Force && speed_defense < 1)
                {
                    float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, hey_defense)));
                    xp += add;
                    assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level);
                }


                if (statbits[i].effect_type == EffectType.DirectDamage)
                {
                    float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, 0)));
                    xp += add;
                    assignXp(add, firearm, primary_effecttype, EffectType.DirectDamage, primary_level, skill_stats.level);
                }

                //SSkill
                if (statbits[i].effect_type == EffectType.EMP)
                {
                    EMPMe(skill_stats.getModifiedStats(factor, 0), false);
                }

                //Regular Skill: Foil -> Foil Lava -> summons EMP
                if (primary_effecttype == EffectType.Foil && statbits[i].effect_type == EffectType.Foil)
                {
                    EMPMe(skill_stats.getModifiedStats(factor, 0), true);
                }

                break;


            case RuneType.Vexing:
                float vf_defense = Get.GetDefense(defenses, EffectType.VexingForce);
                if ((primary_effecttype != EffectType.Focus && statbits[i].effect_type == EffectType.VexingForce) ||
                    (primary_effecttype == EffectType.Focus && primary_effecttype == statbits[i].effect_type))     // for Focus, use focus statbits, not VF
                {
                    if (vf_defense < 1)
                    {
                        float add = stats.getXp(ForceMe(statsum.getModifiedPrimaryStats(vf_defense)));
                        xp += add;
                        assignXp(add, firearm, primary_effecttype, EffectType.VexingForce, primary_level, skill_stats.level);
                    }
                }

                if (statbits[i].effect_type == EffectType.DOT)
                {
                    DOTMe(skill_stats.getModifiedStats(factor, vf_defense), firearm, skill_stats.level);
                    //does damage through an invoke which can't get back to this
                    //invoke calls MassMe, which assigns XP
                }

                if (statbits[i].effect_type == EffectType.Critical)
                {
                    float critical_factor = firearm.critical.getCriticalForce();    //so that we can do correct xp attribution for it
                    if (critical_factor > 0)
                    {
                        float   new_defense = vf_defense / (1 + critical_factor);
                        float[] new_stats   = statsum.getModifiedPrimaryStats(vf_defense / (1 + critical_factor));
                        float   add         = stats.getXp(ForceMe(new_stats));
                        xp += add;
                        assignXp(add, firearm, EffectType.Critical, EffectType.Critical, primary_level, skill_stats.level);
                    }
                }

                if (statbits[i].effect_type == EffectType.Teleport)
                {
                    defense = Get.GetDefense(defenses, EffectType.Teleport);
                    if (defense >= 1)
                    {
                        return(xp);
                    }
                    float add = TeleportMe(skill_stats.getModifiedStats(factor, defense));
                    xp += add;
                    assignXp(add, firearm, primary_effecttype, EffectType.Teleport, primary_level, skill_stats.level);
                }

                if (statbits[i].effect_type == EffectType.Fear)
                {
                    defense = Get.GetDefense(defenses, EffectType.Fear);
                    if (defense < 1)
                    {
                        FearMe(skill_stats.getModifiedStats(factor, defense));
                    }
                }

                break;


            case RuneType.Time:

                if (statbits[i].effect_type == EffectType.Speed && statbits[i].effect_sub_type == EffectSubType.Ultra)
                {
                    defense = Get.GetDefense(defenses, StaticRune.getPrimaryDamageType(statsum.runetype));
                    if (defense >= 1)
                    {
                        return(xp);
                    }

                    float add = SpeedMe(skill_stats.getModifiedStats(factor, defense), EffectType.Speed, statbits[i].effect_sub_type);
                    xp += add;
                    assignXp(add, firearm, primary_effecttype, EffectType.Speed, primary_level, skill_stats.level);
                }
                break;

            case RuneType.Fast:
            case RuneType.Slow:
                if (statbits[i].effect_type == EffectType.Force)
                {
                    defense = Get.GetDefense(defenses, StaticRune.getPrimaryDamageType(statsum.runetype));

                    if (defense >= 1)
                    {
                        return(xp);
                    }

                    float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, defense)));
                    Debug.Log($"Night tower {Sun.Instance.GetCurrentTime()} {firearm.gameObject.name} {this.gameObject.name} defense {defense} xp {add} primary effect {primary_effecttype}\n");
                    xp += add;
                    assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level);
                }

                break;

            default:

                if (statbits[i].effect_type == EffectType.Force)
                {
                    defense = Get.GetDefense(defenses, EffectType.Force);
                    if (defense >= 1)
                    {
                        return(xp);
                    }
                    float add = stats.getXp(ForceMe(skill_stats.getModifiedStats(factor, defense)));
                    xp += add;
                    assignXp(add, firearm, primary_effecttype, EffectType.Force, primary_level, skill_stats.level);
                }
                break;
            }
        }

        //  Debug.Log("Total xp " + xp + "\n");
        return(xp);
    }