Skip to content
View Ikoniklol's full-sized avatar

Block or report Ikoniklol

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don't include any personal information such as legal names or email addresses. Markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Ikoniklol/README.md

using System; using System.Collections.Generic; using System.IO; using System.Linq; using Assets.Main.Scenes; using Assets.Scripts.Models; using Assets.Scripts.Models.GenericBehaviors; using Assets.Scripts.Models.Powers; using Assets.Scripts.Models.Profile; using Assets.Scripts.Models.Towers; using Assets.Scripts.Models.Towers.Behaviors; using Assets.Scripts.Models.Towers.Behaviors.Abilities; using Assets.Scripts.Models.Towers.Behaviors.Abilities.Behaviors; using Assets.Scripts.Models.Towers.Behaviors.Attack; using Assets.Scripts.Models.Towers.Behaviors.Attack.Behaviors; using Assets.Scripts.Models.Towers.Behaviors.Emissions; using Assets.Scripts.Models.Towers.Filters; using Assets.Scripts.Models.Towers.Projectiles.Behaviors; using Assets.Scripts.Models.Towers.Upgrades; using Assets.Scripts.Models.TowerSets; using Assets.Scripts.Unity; using Assets.Scripts.Unity.Display; using Assets.Scripts.Unity.UI_New.InGame; using Assets.Scripts.Unity.UI_New.InGame.StoreMenu; using Assets.Scripts.Unity.UI_New.Upgrade; using Assets.Scripts.Utils; using Harmony; using Il2CppSystem.Collections.Generic; using MelonLoader;

using UnhollowerBaseLib; using UnityEngine; using BTD_Mod_Helper.Extensions; using Assets.Scripts.Models.Towers.Weapons.Behaviors; using Assets.Scripts.Models.Towers.Weapons; using System.Net; using Assets.Scripts.Unity.UI_New.Popups; using TMPro; using Assets.Scripts.Models.Towers.Projectiles; using Assets.Scripts.Models.Towers.TowerFilters; using Assets.Scripts.Unity.UI_New.Main.MonkeySelect; using BTD_Mod_Helper; using BTD_Mod_Helper.Api.Towers; using MinerMonkey; using MinerMonkey.Displays.Projectiles; using BTD_Mod_Helper.Api.Display;

namespace MinerMonkey {

class Main : BloonsMod
{
    //https://github.com/gurrenm3/BloonsTD6-Mod-Helper/releases

    public class MinerMonkey : ModTower
    {
        public override string Name => "MinerMonkey";
        public override string DisplayName => "Miner Monkey";
        public override string Description => "The crazy scientist Pyromanic developed the Miner Monkey to perfection.";
        public override string BaseTower => "BombShooter";
        public override int Cost => 900;
        public override int TopPathUpgrades => 5;
        public override int MiddlePathUpgrades => 5;
        public override int BottomPathUpgrades => 5;
        public override ParagonMode ParagonMode => ParagonMode.Base555;
        public override string TowerSet => "Primary";
        public override int GetTowerIndex(System.Collections.Generic.List<TowerDetailsModel> towerSet)
        {
            return towerSet.First(model => model.towerId == TowerType.DartMonkey).towerIndex + 1;
        }
        public override bool IsValidCrosspath(int[] tiers) =>

HasMod("UltimateCrosspathing") ? true : base.IsValidCrosspath(tiers); public override void ModifyBaseTowerModel(TowerModel towerModel) { //balance stuff //towerModel.display = "06bf915dea753ad43b772045caf1d906"; towerModel.display = new PrefabReference() { guidRef = "06bf915dea753ad43b772045caf1d906" }; //towerModel.GetBehavior().display = "06bf915dea753ad43b772045caf1d906"; towerModel.GetBehavior().display = new PrefabReference() { guidRef = "06bf915dea753ad43b772045caf1d906" }; var attackModel = towerModel.GetBehavior(); attackModel.weapons[0].projectile.GetBehavior().projectile.GetBehavior().CapDamage(9999); attackModel.weapons[0].projectile.GetBehavior().projectile.GetBehavior().maxDamage = 9999; attackModel.weapons[0].projectile.GetBehavior().projectile.maxPierce = 99999; attackModel.weapons[0].projectile.GetBehavior().projectile.CapPierce(99999); attackModel.weapons[0].projectile.GetBehavior().Lifespan = 99; //attackModel.weapons[0].projectile.display = "62e990209b10d374d89f70c6f578def0"; attackModel.weapons[0].projectile.display = new PrefabReference() { guidRef = "62e990209b10d374d89f70c6f578def0" };

            //pierce and damage
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.pierce = 25;
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.GetBehavior<DamageModel>().damage = 2;

            //change radius to 75% of 100 mortar
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.radius = 28 * 0.75f;



            //how many seconds until it shoots
            attackModel.weapons[0].Rate = 2.5f;
        }
        public override string Icon => "steve";
        public override string Portrait => "steve";
    }
    public class Money : ModUpgrade<MinerMonkey>
    {
        public override string Name => "Money";
        public override string DisplayName => "Poor";
        public override string Description => "Uneducated monkey";
        public override int Cost => 3000;
        public override int Path => TOP;
        public override int Tier => 1;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            var attackModel = towerModel.GetAttackModel();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 10;
            MinerCash.maximum += 10;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);

            var projectile = attackModel.weapons[0].projectile;
            projectile.ApplyDisplay<Penny100>(); // Make the projectiles look like Pickaxe
        }
        public override string Icon => "Penny100";
        public override string Portrait => "Penny100";
    }
    public class Mon : ModUpgrade<MinerMonkey>
    {
        public override string Name => "Mon";
        public override string DisplayName => "Going To College";
        public override string Description => "Has luck on his side";
        public override int Cost => 75000;
        public override int Path => TOP;
        public override int Tier => 2;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            var attackModel = towerModel.GetAttackModel();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 100;
            MinerCash.maximum += 100;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);

            var projectile = attackModel.weapons[0].projectile;
            projectile.ApplyDisplay<MinerPickDisplay>(); // Make the projectiles look like Pickaxe
        }
        public override string Icon => "college";
        public override string Portrait => "college";
    }
    public class KRKMONEY : ModUpgrade<MinerMonkey>
    {
        public override string Name => "KRKMONEY";
        public override string DisplayName => "Got Sponsored";
        public override string Description => "Got sponsored by BTD6";
        public override int Cost => 1000000;
        public override int Path => TOP;
        public override int Tier => 3;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            var attackModel = towerModel.GetAttackModel();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 500;
            MinerCash.maximum += 500;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);
        }
        public override string Icon => "ninja";
        public override string Portrait => "ninja";
    }
    public class bigearner : ModUpgrade<MinerMonkey>
    {
        public override string Name => "bigearner";
        public override string DisplayName => "Got a Job";
        public override string Description => "Became an accountant";
        public override int Cost => 2000000;
        public override int Path => TOP;
        public override int Tier => 4;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            var attackModel = towerModel.GetAttackModel();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 1000;
            MinerCash.maximum += 1000;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);
        }
        public override string Icon => "job";
        public override string Portrait => "job";
    }
    public class Hello : ModUpgrade<MinerMonkey>
    {
        public override string Name => "Hello";
        public override string DisplayName => "Mr.Beast mode";
        public override string Description => "Better than Elon Musk";
        public override int Cost => 20000000;
        public override int Path => TOP;
        public override int Tier => 5;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            var attackModel = towerModel.GetAttackModel();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 10000;
            MinerCash.maximum += 10000;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);
        }
        public override string Icon => "what";
        public override string Portrait => "what";
    }
    public class woodenpickaxe : ModUpgrade<MinerMonkey>
    {
        public override string Name => "woodenpickaxe";
        public override string DisplayName => "Wooden Pickaxe";
        public override string Description => "Better than a stick";
        public override int Cost => 1500;
        public override int Path => MIDDLE;
        public override int Tier => 1;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            var projectile = attackModel.weapons[0].projectile;
            projectile.ApplyDisplay<wooden>(); // Make the projectiles look like Pickaxe
            towerModel.AddBehavior(new OverrideCamoDetectionModel("OverrideCamoDetectionModel_", true));
        }
        public override string Icon => "woodenpickaxe";
        public override string Portrait => "woodenpickaxe";

    }
    public class Stonepickaxe : ModUpgrade<MinerMonkey>
    {
        public override string Name => "Stonepickaxe";
        public override string DisplayName => "Iron Pickaxe";
        public override string Description => "Hard work pays off";
        public override int Cost => 15000;
        public override int Path => MIDDLE;
        public override int Tier => 2;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            var fire = Game.instance.model.GetTowerFromId("MortarMonkey-002").Duplicate<TowerModel>().GetBehavior<AttackModel>().weapons[0].projectile.GetBehavior<CreateProjectileOnExhaustFractionModel>().projectile.GetBehavior<AddBehaviorToBloonModel>();
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            var projectile = attackModel.weapons[0].projectile;
            projectile.ApplyDisplay<iron>(); // Make the projectiles look like Pickaxe
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(fire);
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.collisionPasses = new int[] { 0, -1 };
            attackModel.weapons[0].Rate = 1;
        }
        public override string Icon => "ironpickaxe";
        public override string Portrait => "ironpickaxe";
    }
    public class IronPickaxe : ModUpgrade<MinerMonkey>
    {
        public override string Name => "IronPickaxe";
        public override string DisplayName => "Netherite Pickaxe";
        public override string Description => "Harder than diamonds";
        public override int Cost => 30000;
        public override int Path => MIDDLE;
        public override int Tier => 3;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();


            var normal = Game.instance.model.GetTowerFromId("BombShooter-050").Duplicate<TowerModel>().GetBehavior<AttackModel>().weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.GetBehavior<DamageModel>();
            normal.setDamage(3);
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.RemoveBehavior<AttackModel>();
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(normal);

            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 1, 10, false, false) { tags = new string[] { "Fortified" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 10, false, false) { tags = new string[] { "Ceramic" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moab", 1, 10, false, false) { tags = new string[] { "Moab" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Bfb", 1, 10, false, false) { tags = new string[] { "Bfb" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Zomg", 1, 10, false, false) { tags = new string[] { "Zomg" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ddt", 1, 10, false, false) { tags = new string[] { "Ddt" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Bad", 1, 10, false, false) { tags = new string[] { "Bad" }, collisionPass = 0 });
            var projectile = attackModel.weapons[0].projectile;
            projectile.ApplyDisplay<netherite>(); // Make the projectiles look like Pickaxe
            attackModel.weapons[0].Rate = 0.7f;
        }
        public override string Icon => "netheritepickaxe";
        public override string Portrait => "netheritepickaxe";
    }
    public class chaching : ModUpgrade<MinerMonkey>
    {
        public override string Name => "chaching";
        public override string DisplayName => "Efficiency 5";
        public override string Description => "Best pickaxe.....or is it?";
        public override int Cost => 70000;
        public override int Path => MIDDLE;
        public override int Tier => 4;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            attackModel.weapons[0].projectile.pierce += 3;
            var bouncy = Game.instance.model.GetTowerFromId("SniperMonkey-030").Duplicate<TowerModel>().GetBehavior<AttackModel>().weapons[0].projectile.GetBehavior<RetargetOnContactModel>();
            bouncy.distance = 100;
            attackModel.weapons[0].projectile.AddBehavior(bouncy);
            var projectile = attackModel.weapons[0].projectile;
            projectile.ApplyDisplay<efficiency5>(); // Make the projectiles look like Pickaxe
        }
        public override string Icon => "efficiency5";
        public override string Portrait => "efficiency5";
    }
    public class npp : ModUpgrade<MinerMonkey>
    {
        public override string Name => "npp";
        public override string DisplayName => "Admin Hammer";
        public override string Description => "YOU SHOULDN'T HAVE THAT!!!";
        public override int Cost => 500000;
        public override int Path => MIDDLE;
        public override int Tier => 5;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            //balance stuff
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Fortified", 1, 999999, false, false) { tags = new string[] { "Fortified" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ceramic", 1, 999999, false, false) { tags = new string[] { "Ceramic" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Moab", 1, 999999, false, false) { tags = new string[] { "Moab" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Bfb", 1, 999999, false, false) { tags = new string[] { "Bfb" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Zomg", 1, 999999, false, false) { tags = new string[] { "Zomg" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Ddt", 1, 999999, false, false) { tags = new string[] { "Ddt" }, collisionPass = 0 });
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(new DamageModifierForTagModel("aaa", "Bad", 1, 999999, false, false) { tags = new string[] { "Bad" }, collisionPass = 0 });

            var ability = Game.instance.model.GetTowerFromId("AdmiralBrickell 3").Duplicate<TowerModel>().GetBehavior<AbilityModel>();
            ability.GetBehavior<ActivateRateSupportZoneModel>().filters[0] = new FilterInBaseTowerIdModel("lol", new string[] { "DartMonkey", "MortarMonkey" });
            towerModel.AddBehavior(ability);
            var projectile = attackModel.weapons[0].projectile;
            projectile.ApplyDisplay<Banhammer>(); // Make the projectiles look like Pickaxe
            attackModel.weapons[0].Rate = 0.5f;
        }
        public override string Icon => "Banhammer";
        public override string Portrait => "Banhammer";
    }
    public class BitSoil : ModUpgrade<MinerMonkey>
    {
        public override string Name => "Bitsoil";
        public override string DisplayName => "Bitsoil";
        public override string Description => "EW";
        public override int Cost => 10000;
        public override int Path => BOTTOM;
        public override int Tier => 1;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 10;
            MinerCash.maximum += 10;
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            attackModel.weapons[0].Rate *= 0.8f;
        }
        public override string Icon => "bitsoil";
        public override string Portrait => "bitsoil";
    }
    public class CrashtheMarket : ModUpgrade<MinerMonkey>
    {
        public override string Name => "CrashtheMarket";
        public override string DisplayName => "Crash the Market";
        public override string Description => "Hard work pays off";
        public override int Cost => 15000;
        public override int Path => BOTTOM;
        public override int Tier => 2;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 3000;
            MinerCash.maximum += 3000;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);
            towerModel.ignoreBlockers = true;
            attackModel.weapons[0].projectile.ignoreBlockers = true;
            attackModel.weapons[0].projectile.canCollisionBeBlockedByMapLos = false;
            attackModel.attackThroughWalls = true;
        }
        public override string Icon => "Crash";
        public override string Portrait => "Crash";
    }
    public class Diamondcoin : ModUpgrade<MinerMonkey>
    {
        public override string Name => "Diamondcoin";
        public override string DisplayName => "Diamond coin";
        public override string Description => "Worth more than your whole house";
        public override int Cost => 25000;
        public override int Path => BOTTOM;
        public override int Tier => 3;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 9182;
            MinerCash.maximum += 9182;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);
            var lasershock = Game.instance.model.GetTowerFromId("DartlingGunner-200").Duplicate<TowerModel>().GetBehavior<AttackModel>().weapons[0].projectile.GetBehavior<AddBehaviorToBloonModel>();
            lasershock.lifespan = 4;
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.AddBehavior(lasershock);
            attackModel.weapons[0].projectile.AddBehavior(lasershock);
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.collisionPasses = new int[] { 0, 1 };
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.GetBehavior<DamageModel>().damage += 3;
        }
        public override string Icon => "diamond";
        public override string Portrait => "diamond";
    }
    public class DogeCoin : ModUpgrade<MinerMonkey>
    {
        public override string Name => "DogeCoin";
        public override string DisplayName => "Doge Coin";
        public override string Description => "Best Coin.....or is it?";
        public override int Cost => 1000000;
        public override int Path => BOTTOM;
        public override int Tier => 4;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 100000;
            MinerCash.maximum += 100000;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);
        }
        public override string Icon => "dogecoin";
        public override string Portrait => "dogecoin";
    }
    public class alien : ModUpgrade<MinerMonkey>
    {
        public override string Name => "AlienCoin";
        public override string DisplayName => "AlienCoin";
        public override string Description => "How did you buy this?";
        public override int Cost => 150000000;
        public override int Path => BOTTOM;
        public override int Tier => 5;
        public override void ApplyUpgrade(TowerModel towerModel)
        {
            AttackModel attackModel = towerModel.GetBehavior<AttackModel>();
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.pierce += 100;
            attackModel.weapons[0].projectile.GetBehavior<CreateProjectileOnContactModel>().projectile.GetBehavior<DamageModel>().damage += 600;
            var genericDamage = Game.instance.model.GetTowerFromId("Gwendolin").Duplicate<TowerModel>().GetBehavior<AttackModel>().weapons[0].projectile.GetBehavior<DamageModel>();
            attackModel.weapons[0].projectile.AddBehavior(genericDamage);
            attackModel.weapons[0].projectile.GetBehavior<DamageModel>().damage += 500;
            attackModel.weapons[0].projectile.pierce += 50;
            attackModel.weapons[0].projectile.display = new PrefabReference() { guidRef = "c8c2a5ade2633394eafdf29a4013e919" };
            var MinerCash = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CashModel>().Duplicate<CashModel>();
            var MinerText = Game.instance.model.GetTowerFromId("BananaFarm-004").GetWeapon().projectile.GetBehavior<CreateTextEffectModel>().Duplicate<CreateTextEffectModel>();
            MinerCash.minimum += 100000;
            MinerCash.maximum += 100000;
            attackModel.weapons[0].projectile.AddBehavior(MinerCash);
            attackModel.weapons[0].projectile.AddBehavior(MinerText);

        }
        public override string Icon => "alien";
        public override string Portrait => "alien";
    }
    public class ParagonDisplay : ModTowerDisplay<MinerMonkey>
    {
        public override string BaseDisplay => GetDisplay(TowerType.DartMonkey, 0, 0, 0);

        public override bool UseForTower(int[] tiers)

        {
            return IsParagon(tiers);
        }

            public override void ModifyDisplayNode(UnityDisplayNode node)
        {

            node.RemoveBone("SuperMonkeyRig:Dart");
        }
        public class Cosmicinvestor : ModParagonUpgrade<MinerMonkey>
        {
            public override int Cost => 1000000000;
            public override string Description => " you just beat capitalism (see what i did with the name?)";
            public override string DisplayName => "Kosmic Investor";


            public override void ApplyUpgrade(TowerModel towerModel)
            {
                towerModel.RemoveBehaviors<AttackModel>();

                //Create Banana Gun
                var banhamer = Game.instance.model.GetTowerFromId("SpikeFactory").GetAttackModel().Duplicate();
                var banhamerWeapon = banhamer.weapons[0];
                var banhamerProj = banhamer.weapons[0].projectile;
                AttackModel attackModel = towerModel.GetBehavior<AttackModel>();

                //Edit Banana Gun Attack Model
                banhamer.RemoveBehavior<TargetTrackModel>();
                banhamer.AddBehavior(new TargetFirstModel("TargetFirstModel_", true, false));
                banhamer.AddBehavior(new TargetStrongModel("TargetStrongModel_", true, false));
                banhamer.AddBehavior(new TargetCloseModel("TargetCloseModel_", true, false));
                banhamer.AddBehavior(new TargetLastModel("TargetLastModel_", true, false));
                banhamer.AddBehavior(new RotateToTargetModel("RotateToTargetModel_", true, true, true, 1, true, true));
                banhamer.attackThroughWalls = true;

                //Edit Banana Gun Weapon Model
                banhamerWeapon.fireWithoutTarget = false;
                banhamerWeapon.rate = 0f;
                banhamerProj.RemoveBehavior<DamageModel>();
                banhamerProj.RemoveBehavior<SetSpriteFromPierceModel>();
                banhamerProj.AddBehavior(new DamageModel("DamageModel_", 999999, 999999, true, true, true, BloonProperties.None, BloonProperties.None));
                banhamerProj.AddBehavior(new WindModel("WindModel_", 0, 200, 999999, true, null, 0));
                banhamerProj.GetBehavior<ArriveAtTargetModel>().timeToTake = 0f;
                banhamerProj.pierce = 9999999;
                banhamerProj.ApplyDisplay<Banhammer>();

                var BananaFarmAttackModel = Game.instance.model.GetTowerFromId("BananaFarm").GetAttackModel().Duplicate();
                BananaFarmAttackModel.name = "BananaFarm_";
                BananaFarmAttackModel.weapons[0].GetBehavior<EmissionsPerRoundFilterModel>().count = 9999999;
                BananaFarmAttackModel.weapons[0].projectile.GetBehavior<CashModel>().maximum = 9999999f;
                BananaFarmAttackModel.weapons[0].projectile.GetBehavior<CashModel>().minimum = 9999999f;
                towerModel.range = 100000;
                banhamer.range = towerModel.range;
                towerModel.isGlobalRange = true;
                towerModel.AddBehavior(banhamer);
                towerModel.AddBehavior(BananaFarmAttackModel);

                towerModel.AddBehavior(new MonkeyCityIncomeSupportModel("_MonkeyCityIncomeSupport", true, 9999999f, null, "MonkeyCityBuff", "BuffIconVillagexx4"));
                towerModel.AddBehavior(new OverrideCamoDetectionModel("OverrideCamoDetectionModel_", true));
                towerModel.GetDescendants<FilterInvisibleModel>().ForEach(model => model.isActive = false);


            }
            public override string Icon => "investor";
            public override string Portrait => "investor";
        }




        [HarmonyPatch(typeof(InGame), "Update")]
        public class Update_Patch
        {
            [HarmonyPostfix]
            public static void Postfix()
            {
                if (!(InGame.instance != null && InGame.instance.bridge != null)) return;
                try
                {
                    foreach (var tts in InGame.Bridge.GetAllTowers())
                    {

                        if (!tts.namedMonkeyKey.ToLower().Contains("MinerMonkey")) continue;
                        if (tts?.tower?.Node?.graphic?.transform != null)
                        {
                            tts.tower.Node.graphic.transform.localScale = new UnityEngine.Vector3(1.3f, 1.3f, 1.3f);

                        }

                    }
                }
                catch
                {

                }


            }
        }


    }
}

}

Popular repositories Loading

  1. Ikoniklol Ikoniklol Public

    Config files for my GitHub profile.

  2. BloonsTD6Mods BloonsTD6Mods Public

    Forked from awildergoose/BloonsTD6Mods

    C#