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); }
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); }
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" }); } }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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]); }
/// <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()); }
public static void CarpetofSpikes(TowerModel model) { SpikeStorm(model); model.GetAbilites()[0].enabled = false; }