コード例 #1
0
        public static void SpecialPoperations(TowerModel model)
        {
            var ability  = model.GetAbilites()[1];
            var behavior = new ActivateAbilityOnRoundStartModel("ActivateAbilityOnRoundStartModel_SpecialPoperations", ability.Duplicate());

            ability.enabled = false;
            model.AddBehavior(behavior);

            var specialPops = model.GetAbilites()[2];

            model.behaviors = model.behaviors.RemoveItem(specialPops);

            var marine = specialPops.GetBehavior <FindDeploymentLocationModel>().towerModel;

            var weapon = marine.GetAttackModels()[0].weapons[0].Duplicate();

            var airBehavior = model.GetAttackModels()[0].weapons[0].GetBehavior <FireFromAirUnitModel>();

            weapon.behaviors = new Il2CppReferenceArray <WeaponBehaviorModel>(new WeaponBehaviorModel[] { airBehavior });

            weapon.ejectX = weapon.ejectY = weapon.ejectZ = 0;

            weapon.emission = model.GetWeapon().emission.Duplicate();
            weapon.emission.Cast <EmissionWithOffsetsModel>().throwMarkerOffsetModels =
                new Il2CppReferenceArray <ThrowMarkerOffsetModel>(new[]
            {
                weapon.emission.Cast <EmissionWithOffsetsModel>().throwMarkerOffsetModels[0]
            });
            weapon.emission.Cast <EmissionWithOffsetsModel>().throwMarkerOffsetModels[0].ejectX = 0;
            weapon.emission.Cast <EmissionWithOffsetsModel>().projectileCount = 1;

            model.GetAttackModels()[0].AddWeapon(weapon);
        }
コード例 #2
0
        public static void GroundZero(TowerModel model)
        {
            var ability       = model.GetAbilites()[0];
            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            var effectModel = ability.GetBehavior <CreateEffectOnAbilityModel>().effectModel.Duplicate();

            effectModel.scale             = .5f;
            effectModel.useCenterPosition = false;

            var effectBehavior =
                new CreateEffectOnExhaustFractionModel("CreateEffectOnExhaustFractionModel_GroundZero", "", effectModel, 0, false, 1.0f, -1f, false);

            abilityWeapon.projectile.AddBehavior(effectBehavior);
            abilityWeapon.rate = 6;
            abilityWeapon.projectile.GetDamageModel().damage = 100;
            abilityWeapon.projectile.radius = 100;

            var airBehavior = model.GetAttackModels()[0].weapons[0].GetBehavior <FireFromAirUnitModel>();

            abilityWeapon.behaviors = new Il2CppReferenceArray <WeaponBehaviorModel>(new WeaponBehaviorModel[] { airBehavior });

            var sound         = ability.GetBehavior <CreateSoundOnAbilityModel>().sound;
            var soundBehavior =
                new CreateSoundOnProjectileExhaustModel("CreateSoundOnProjectileExhaustModel_GroundZero", sound, sound, sound, sound, sound);

            abilityWeapon.projectile.AddBehavior(soundBehavior);

            model.AddBehavior(abilityAttack);
        }
コード例 #3
0
        public static void BloonSabotage(TowerModel model)
        {
            model.range += 10;
            var ability       = model.GetAbilites()[0];
            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];
            var slowMutator   = abilityWeapon.projectile.GetBehavior <SlowMinusAbilityDurationModel>().Mutator;

            var dontSlowBadBehavior = abilityWeapon.projectile.GetBehavior <SlowModifierForTagModel>();

            var slowBehavior = new SlowModel("Sabotage", 0f, 2f, slowMutator.mutationId, "", 999,
                                             new Il2CppSystem.Collections.Generic.Dictionary <string, AssetPathModel>(), 0, true, false, null,
                                             false, false)
            {
                mutator = slowMutator
            };


            foreach (var weaponModel in model.GetWeapons())
            {
                weaponModel.projectile.AddBehavior(slowBehavior);
                weaponModel.projectile.AddBehavior(dontSlowBadBehavior);
                weaponModel.projectile.pierce += 5;

                weaponModel.projectile.GetDamageModel().damageTypes = new Il2CppStringArray(new[] { "Normal" });
            }
        }
コード例 #4
0
        public static void TechTerror(TowerModel model)
        {
            var ability       = model.GetAbilites()[0];
            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            var effect = ability.GetBehavior <CreateEffectOnAbilityModel>().effectModel;

            abilityWeapon.projectile.display = effect.assetId;
            var effectBehavior =
                new CreateEffectOnExhaustFractionModel("CreateEffectOnExhaustFractionModel_Annihilation", "", effect, 0, false, 1.0f, -1f, false);

            abilityWeapon.projectile.AddBehavior(effectBehavior);

            /*
             * var sound = ability.GetBehavior<CreateSoundOnAbilityModel>().sound;
             * var soundBehavior =
             *  new CreateSoundOnProjectileExhaustModel("AbilityChoice", sound, sound, sound, sound, sound);
             * abilityWeapon.projectile.AddBehavior(soundBehavior);
             */

            abilityWeapon.projectile.GetDamageModel().damage /= 20;
            abilityWeapon.rate = 2.25f;

            abilityAttack.range             = abilityWeapon.projectile.radius - 10;
            abilityAttack.fireWithoutTarget = false;

            model.AddBehavior(abilityAttack);
        }
コード例 #5
0
        public static void SupportChinook(TowerModel model)
        {
            var ability  = model.GetAbilites()[1];
            var behavior = new ActivateAbilityOnRoundStartModel("ActivateAbilityOnRoundStartModel_SupportChinook", ability.Duplicate());

            ability.enabled = false;
            model.AddBehavior(behavior);
        }
コード例 #6
0
        public static BehaviorMutator GetMutator(TowerModel engineer, int tier, bool ultra)
        {
            var model    = engineer.GetAbilites()[0].GetBehavior <OverclockModel>().Duplicate();
            var cooldown = ultra ? .35f : .45f;

            model.rateModifier = cooldown / (cooldown + 2f / 3f * (1.05f - .15f * tier));
            return(new OverclockModel.OverclockMutator(model));
        }
コード例 #7
0
        public static void SpikeStorm(TowerModel model)
        {
            var ability = model.GetAbilites()[0];

            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            abilityWeapon.fireBetweenRounds = false;
            abilityWeapon.rate *= 10;
            model.AddBehavior(abilityAttack);
        }
コード例 #8
0
        public static void TransformingTonic(TowerModel model)
        {
            model.range += 9;
            var ability       = model.GetAbilites()[0];
            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            abilityAttack.range = model.range;
            abilityWeapon.rate *= 3;

            model.AddBehavior(abilityAttack);
        }
コード例 #9
0
        public static void TotalTransformation(TowerModel model)
        {
            model.range += 27;
            var ability       = model.GetAbilites()[0];
            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            abilityAttack.range              = model.range;
            abilityWeapon.rate              /= 2;
            abilityWeapon.projectile.pierce += 10;
            abilityWeapon.projectile.GetDamageModel().damage += 1;

            model.AddBehavior(abilityAttack);
        }
コード例 #10
0
        public static void FirstStrikeCapability(TowerModel model)
        {
            var abilityAttack = model.GetAbilites()[0].GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            abilityWeapon.rate = model.GetAbilites()[0].cooldown / 50f;

            foreach (var createProjectileOnExpireModel in abilityWeapon.projectile.GetBehaviors <CreateProjectileOnExpireModel>())
            {
                createProjectileOnExpireModel.projectile.GetDamageModel().damage /= 50;
                if (createProjectileOnExpireModel.projectile.radius > 10)
                {
                    createProjectileOnExpireModel.projectile.radius /= 2f;
                }
            }

            var asset = abilityWeapon.projectile.GetBehavior <CreateEffectOnExpireModel>();

            asset.assetId     = "";
            asset.effectModel = new EffectModel(asset.name, asset.assetId, .5f, asset.lifespan, false,
                                                false, false, false, false, false, false);

            model.AddBehavior(abilityAttack);
        }
コード例 #11
0
        public static void WizardLordPhoenix(TowerModel model)
        {
            var permaBehavior = model.GetBehavior <TowerCreateTowerModel>().Duplicate();
            var lordPhoenix   = model.GetAbilites()[0].GetBehavior <AbilityCreateTowerModel>().towerModel.Duplicate();

            lordPhoenix.behaviors = lordPhoenix.behaviors.RemoveItemOfType <Model, TowerExpireModel>();
            foreach (var weaponModel in lordPhoenix.GetWeapons())
            {
                weaponModel.rate *= 3f;
            }

            permaBehavior.towerModel = lordPhoenix;

            model.AddBehavior(permaBehavior);
        }
コード例 #12
0
        public static void HomelandDefense(TowerModel model)
        {
            var ability       = model.GetAbilites()[0];
            var c2a           = ability.GetBehavior <CallToArmsModel>();
            var buffIndicator = c2a.Mutator.buffIndicator;

            var buff = new RateSupportModel("RateSupportModel_HomelandDefense", .5f, true, "Village:HomelandDefense",
                                            true, 1,
                                            new Il2CppReferenceArray <TowerFilterModel>(0), buffIndicator.buffName, buffIndicator.iconName)
            {
                onlyShowBuffIfMutated = true,
                isUnique = true
            };

            model.AddBehavior(buff);
        }
コード例 #13
0
        public static void PopandAwe(TowerModel model)
        {
            var realWeapon    = model.GetWeapon();
            var ability       = model.GetAbilites()[0];
            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            var popAndEffect = ability.GetBehavior <CreateEffectOnAbilityModel>().effectModel.Duplicate();

            popAndEffect.lifespan /= 8f;

            var newWeapon    = realWeapon.Duplicate();
            var weaponEffect = newWeapon.projectile.GetBehavior <CreateEffectOnExpireModel>();

            weaponEffect.assetId                       = "";
            weaponEffect.effectModel                   = popAndEffect;
            weaponEffect.effectModel.scale            /= 3f;
            weaponEffect.effectModel.useCenterPosition = false;
            weaponEffect.effectModel.lifespan         /= 2f;
            newWeapon.rate = 4f;

            var newProjectile = abilityWeapon.projectile;

            newProjectile.GetBehavior <AgeModel>().lifespanFrames = 1;
            newProjectile.radius = realWeapon.projectile.radius * 2;

            newProjectile.behaviors = newProjectile.behaviors.RemoveItemOfType <Model, ClearHitBloonsModel>();

            newWeapon.projectile.GetBehavior <CreateProjectileOnExhaustFractionModel>().projectile = newProjectile;
            newWeapon.projectile.behaviors = newWeapon.projectile.behaviors
                                             .RemoveItemOfType <Model, CreateEffectOnExhaustFractionModel>();

            var sound = Game.instance.model.GetTower(MortarMonkey, 5).GetWeapon().projectile
                        .GetBehavior <CreateSoundOnProjectileExhaustModel>();

            newWeapon.projectile.behaviors = newWeapon.projectile.behaviors
                                             .RemoveItemOfType <Model, CreateSoundOnProjectileExhaustModel>();
            newWeapon.projectile.AddBehavior(sound);

            model.GetAttackModels()[0].AddWeapon(newWeapon);
        }
コード例 #14
0
        public static void GlueStrike(TowerModel model)
        {
            var realWeapon    = model.GetWeapon();
            var ability       = model.GetAbilites()[0];
            var abilityAttack = ability.GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();
            var abilityWeapon = abilityAttack.weapons[0];

            var behaviors       = abilityWeapon.projectile.GetBehaviors <AddBehaviorToBloonModel>();
            var damageBoost     = behaviors[behaviors.Count - 1];
            var abilitySlow     = abilityWeapon.projectile.GetBehavior <SlowModel>();
            var realSlow        = realWeapon.projectile.GetBehavior <SlowModel>();
            var realProjectile2 = realWeapon.projectile.GetBehavior <CreateProjectileOnContactModel>().projectile;
            var realSlow2       = realProjectile2.GetBehavior <SlowModel>();

            realSlow.lifespan            = abilitySlow.lifespan;
            realSlow.layers              = abilitySlow.layers;
            realSlow.mutator.multiplier  = abilitySlow.Multiplier;
            realSlow2.lifespan           = abilitySlow.lifespan;
            realSlow2.layers             = abilitySlow.layers;
            realSlow2.mutator.multiplier = abilitySlow.Multiplier;

            realWeapon.projectile.AddBehavior(damageBoost);
            realProjectile2.AddBehavior(damageBoost);
        }
コード例 #15
0
        public static void RocketStorm(TowerModel model)
        {
            var abilityAttack = model.GetAbilites()[0].GetBehavior <ActivateAttackModel>().attacks[0].Duplicate();

            var abilityWeapon = abilityAttack.weapons[0];
            var realWeapon    = model.GetWeapon();

            abilityWeapon.emission = realWeapon.emission;
            abilityWeapon.GetBehavior <EjectEffectModel>().effectModel.lifespan = .05f;
            abilityWeapon.rate /= 4;


            if (abilityWeapon.projectile.GetBehavior <CreateProjectileOnContactModel>().projectile.HasBehavior <SlowModel>())
            {
                abilityWeapon.projectile.GetBehavior <CreateProjectileOnContactModel>().projectile.GetBehavior <SlowModel>().lifespan /= 3;
                abilityWeapon.projectile.GetBehavior <CreateProjectileOnContactModel>().projectile.GetBehavior <SlowModel>()
                .dontRefreshDuration = true;
                abilityWeapon.projectile.GetBehavior <CreateProjectileOnBlockerCollideModel>().projectile.GetBehavior <SlowModel>().lifespan /= 3;
                abilityWeapon.projectile.GetBehavior <CreateProjectileOnBlockerCollideModel>().projectile.GetBehavior <SlowModel>()
                .dontRefreshDuration = true;
            }

            model.GetAttackModels()[0].AddWeapon(abilityWeapon);
        }
コード例 #16
0
 /// <summary>
 /// (Cross-Game compatible) Return a specific Ability of the tower.
 /// </summary>
 /// <param name="index">Index of the ability you want.</param>
 public static AbilityModel GetAbility(this TowerModel towerModel, int index)
 {
     return(towerModel.GetAbilites()[index]);
 }
コード例 #17
0
 /// <summary>
 /// (Cross-Game compatible) Return a specific Ability of the tower. By default will get the first ability
 /// </summary>
 public static AbilityModel GetAbility(this TowerModel towerModel)
 {
     return(towerModel.GetAbilites().FirstOrDefault());
 }
コード例 #18
0
 public static void CarpetofSpikes(TowerModel model)
 {
     SpikeStorm(model);
     model.GetAbilites()[0].enabled = false;
 }