public void ModelColorTableResolver(int type, TowerModel tower, Models.LISFileReader lisFile) { Dictionary <int, LISFileItem> NODE_ID_TO_ITEM = lisFile.ITEM_DICTIONARY; int TYPE_ID = lisFile.param.SpecialTypeId; switch (type) { case 0: GetTemperatureColorTable(tower, NODE_ID_TO_ITEM); break; case 1: GetDisplacementColorTable(tower, NODE_ID_TO_ITEM, TYPE_ID); break; case 2: GetStressColorTable(tower, NODE_ID_TO_ITEM, TYPE_ID); break; case 3: GetStrainColorTable(tower, NODE_ID_TO_ITEM, TYPE_ID); break; case 4: GetPlasticStrainColorTable(tower, NODE_ID_TO_ITEM, TYPE_ID); break; } // assign new elem-color table tower.SetColorGen(ColorGen); }
public static void MOABAssassin(TowerModel model) { var realProjectile = model.GetWeapon().projectile.GetBehavior <CreateProjectileOnContactModel>() .projectile; realProjectile.GetBehaviors <DamageModifierForTagModel>().First(m => m.tag == "Moabs").damageAddative += 18; }
/// <summary> /// Get the number position of this TowerModel in the list of all tower models /// </summary> public static int?GetIndex(this TowerModel towerModel) { List <TowerDetailsModel> allTowers = Game.instance.model.towerSet.ToList(); TowerDetailsModel detail = allTowers.FirstOrDefault(towerDetail => towerDetail.towerId == towerModel.baseId); return(allTowers.IndexOf(detail)); }
public static void GrandSaboteur(TowerModel model) { BloonSabotage(model); model.range += 10; List <string[]> tags = new List <string[]> { new [] { "Moab" }, new [] { "Bfb" }, new [] { "Zomg" }, new [] { "Ddt" }, new [] { "Bad" }, }; foreach (var weaponModel in model.GetWeapons()) { for (var i = 0; i < tags.Count; i++) { var t = tags[i]; var behavior = new DamageModifierForTagModel("DamageModifierForTagModel_" + i, t[0], 1.0f, 10 * (i + 1), false, false) { tags = t }; weaponModel.projectile.AddBehavior(behavior); weaponModel.projectile.pierce += 10; weaponModel.projectile.GetDamageModel().damageTypes = new Il2CppStringArray(new[] { "Normal" }); } } }
public static void SpiritoftheForest(TowerModel model) { JunglesBounty(model); var lives = new BonusLivesPerRoundModel("BonusLivesPerRoundModel", 25, 1f, "9bef6b3a7356f834eb953cc79622cdef"); model.AddBehavior(lives); }
internal static void Postfix(Tower tower, TowerModel def, string __state) { if (__state != null) { MelonMain.PerformHook(mod => mod.OnTowerUpgraded(tower, __state, def)); } }
internal static void Postfix(Tower tower, TowerModel def, string __state) { if (__state != null) { MelonMain.DoPatchMethods(mod => mod.OnTowerUpgraded(tower, __state, def)); } }
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 PlasmaMonkeyFanClub(TowerModel model) { model.GetWeapon().rate *= 0.03f / .475f; model.range += 20; model.GetAttackModels()[0].range += 20; ProjectileModel plasmaModel = Game.instance.model.GetTower(SuperMonkey, 2, 0, 0).GetWeapon().projectile; foreach (var weaponProjectile in model.GetAllProjectiles()) { if (weaponProjectile.display == null) { continue; } weaponProjectile.display = plasmaModel.display; weaponProjectile.GetBehavior <DisplayModel>().display = plasmaModel.display; weaponProjectile.GetDamageModel().damage += 2; weaponProjectile.GetDamageModel().damageTypes = new Il2CppStringArray(new[] { "Plasma" }); weaponProjectile.pierce += 5; weaponProjectile.GetBehavior <TravelStraitModel>().lifespan *= 2f; weaponProjectile.GetBehavior <TravelStraitModel>().lifespanFrames *= 2; } }
public static void GlueStorm(TowerModel model) { GlueStrike(model); model.range *= 2; model.GetAttackModels()[0].range *= 2; model.GetWeapon().rate /= 2f; }
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 AbsoluteZero(TowerModel model) { var realSlow = model.GetBehavior <SlowBloonsZoneModel>(); var totem = Game.instance.model.GetTowerFromId("NaturesWardTotem"); var slow = totem.GetBehaviors <SlowBloonsZoneModel>().First(b => !b.name.Contains("NonMoabs")).Duplicate(); slow.zoneRadius = realSlow.zoneRadius; slow.bindRadiusToTowerRange = true; slow.radiusOffset = realSlow.radiusOffset; slow.mutator.Cast <SlowBloonsZoneModel.Mutator>().speedScale -= .1f; model.AddBehavior(slow); var buff = new RateSupportModel("RateSupportZoneModel_AbilityChoice", 2f / 3f, true, "AbsoluteZeroRateBuff2", false, 1, new Il2CppReferenceArray <TowerFilterModel>( new TowerFilterModel[] { new FilterInBaseTowerIdModel("FilterInBaseTowerIdModel_", new Il2CppStringArray(new [] { IceMonkey })) } ) , "", ""); buff.showBuffIcon = false; buff.appliesToOwningTower = true; model.AddBehavior(buff); }
public void ModelParameterResolver(int type, TowerModel tower, Models.LISFileReader lisFile) { Dictionary <int, LISFileItem> NODE_ID_TO_ITEM = lisFile.ITEM_DICTIONARY; int TYPE_ID = lisFile.param.SpecialTypeId; switch (type) { case 0: break; case 1: SetDisplacementModelParamters(tower, NODE_ID_TO_ITEM, TYPE_ID); break; case 2: SetStrainModelParamters(tower, NODE_ID_TO_ITEM, TYPE_ID); break; case 3: break; case 4: break; } }
public void GetStressColorTable(TowerModel tower, Dictionary <int, LISFileItem> NODE_ID_TO_ITEM, int TYPE_ID) { foreach (ListElemBase elem in tower.ElemList) { double AVE_TEMP = 0.0; int cnt = 0; for (int i = 0; i < 8; i++) { if (NODE_ID_TO_ITEM.ContainsKey(elem.Elem_Nodes[i])) { ListNodeBase node = tower.NodeList[tower.NodeElemTable[elem.Elem_Nodes[i]]]; LISFileItem lisItem = NODE_ID_TO_ITEM[elem.Elem_Nodes[i]]; AVE_TEMP += lisItem.VAL[TYPE_ID]; cnt++; } } if (cnt != 0) { AVE_TEMP /= cnt; } ColorGen.AddElemPropertyValue(AVE_TEMP, elem.Elem_Number); } ColorGen.SetElemPropertyMinMaxValue(); ColorGen.SetGivenColorTable(); ColorGen.SetDivisionValues(); }
/// <summary> /// Return the UpgradeModel for a specific upgrade path/tier /// </summary> /// <param name="path"></param> /// <param name="tier"></param> public static UpgradeModel GetUpgrade(this TowerModel towerModel, int path, int tier) { if (path < 0 || tier < 0) { return(null); } int tier1 = (path == 0) ? tier : 0; int tier2 = (path == 1) ? tier : 0; int tier3 = (path == 2) ? tier : 0; TowerModel tempTower = Game.instance?.model?.GetTower(towerModel.GetBaseId(), tier1, tier2, tier3); if (tempTower is null) { return(null); } const int offset = 1; List <UpgradeModel> appliedUpgrades = tempTower.GetAppliedUpgrades(); UpgradeModel results = appliedUpgrades.FirstOrDefault(model => model.path == path && model.tier == (tier - offset)); return(null); }
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 AskApplyToTower(Tower tower, string upgradeName, TowerModel newBaseTowerModel) { if (!InGame.instance.IsCoop || tower.owner == Game.instance.nkGI.PeerID) { PopupScreen.instance.ShowPopup(PopupScreen.Placement.inGameCenter, "Ability Choice (Can't be Undone)", $"Do you want to forego the {upgradeName} ability to instead get \"{AllUpgrades[upgradeName]}\"", new Action(() => { EnableForTower(tower, newBaseTowerModel); if (InGame.instance.IsCoop && Game.instance.nkGI != null) { Game.instance.nkGI.SendMessage("Enable: " + tower.Id, null, "AbilityChoice"); } }), "Yes", new Action(() => { DisableForTower(tower); if (InGame.instance.IsCoop && Game.instance.nkGI != null) { Game.instance.nkGI.SendMessage("Disable: " + tower.Id, null, "AbilityChoice"); } }), "No", Popup.TransitionAnim.Scale ); } else { CoOpTowerModelCache[tower.Id] = newBaseTowerModel; } }
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 TowerModel CraftsModePreExecutor() { Models.VTKFormPreExecutor preExecutor = new Models.VTKFormPreExecutor(); int EnvCheck = preExecutor.FormEnvironmentChecker(CfEnv.paras); if (EnvCheck == 1) { // The Environment Check has been passed // First: Build the environment if (CfEnv.WorkSpaceInstance.Env.BuildLisFileExecutor(CfEnv.paras) == -1) { MessageBox.Show("文件不存在"); return(null); } // Second: Get the model TowerModel newTowerModel = preExecutor.TowerModelGetter(CfEnv.WorkSpaceInstance.Env.LisFileExecutor, CfEnv.WorkSpaceInstance.Env.TowerModelList, CfEnv.WorkSpaceInstance.TowerModelInstance, CfEnv.paras); return(newTowerModel); //BuildForm(newTowerModel); } else if (EnvCheck == -1) { return(CfEnv.WorkSpaceInstance.TowerModelInstance); //Build Origin model //BuildForm(WorkSpaceInstance.TowerModelInstance); } return(null); }
static void spawnTower(Vector3 v3, TowerModel towerModel) { towerPlaced = false; int attempts = 0; while (!towerPlaced && attempts < 100) { { for (int i = -50; i < 200; i++) { try { float y = v3.y * -2.3f; var towerPos = new UnityEngine.Vector2(v3.x, y); InGame.instance.bridge.CreateTowerAt(towerPos, towerModel, i, true, action2); //System.Console.WriteLine(x + " " + y); break; } catch// (System.Exception e2) { //System.Console.WriteLine(e2 + ""); } } attempts++; } } }
/// <summary> /// (Cross-Game compatible) Return all TowerToSimulations with this TowerModel /// </summary> public static List <TowerToSimulation> GetAllTowerToSim(this TowerModel towerModel) { var towers = InGame.instance?.GetAllTowerToSim(); var desiredTowers = towers.Where(towerSim => towerSim.Def.name == towerModel.name).ToList(); return(desiredTowers); }
internal static void Postfix(UpgradeScreen __instance, TowerModel tower, int pathIndex, Il2CppReferenceArray <UpgradeDetails> pathUpgrades) { var modTower = tower.GetModTower(); if (modTower != null) { var portrait = modTower.PortraitReference; var maxPathTier = modTower.tierMaxes[pathIndex]; var emptyAbilities = new List <AbilityModel>().Cast <ICollection <AbilityModel> >(); var upgradeModel = modTower.dummyUpgrade; for (var i = maxPathTier; i < 5; i++) { var upgradeDetails = pathUpgrades[i]; upgradeDetails.SetUpgrade(tower.baseId, upgradeModel, emptyAbilities, pathIndex, portrait); upgradeDetails.gameObject.SetActive(false); } if (maxPathTier < 5) { var bgLines = __instance.transform.GetComponentFromChildrenByName <RectTransform>($"{pathIndex + 1}"); bgLines.GetComponentsInChildren <CanvasRenderer>().Do(renderer => { renderer.SetAlpha(0); }); } } }
/// <summary> /// (Cross-Game compatible) Recursively get every WeaponModels this TowerModel has /// </summary> public static List <WeaponModel> GetWeapons(this TowerModel towerModel) { List <AttackModel> attackModels = towerModel.GetAttackModels(); if (attackModels is null) { return(null); } if (!attackModels.Any()) { return(new List <WeaponModel>()); } List <WeaponModel> weaponModels = new List <WeaponModel>(); foreach (AttackModel attackModel in attackModels) { Il2CppReferenceArray <WeaponModel> weapons = attackModel.weapons; if (weapons != null) { weaponModels.AddRange(weapons); } } return(weaponModels); }
/// <summary> /// (Cross-Game compatible) Duplicate this TowerModel with a unique name. Very useful for making custom TowerModels /// </summary> /// <param name="towerModel"></param> /// <param name="newTowerId">Set's the new towerId of this copy. By default the baseId will be set to this as well</param> /// <returns></returns> internal static TowerModel MakeCopyInternal(TowerModel towerModel, string newTowerId) { var duplicate = towerModel.Duplicate(); duplicate.name = newTowerId; return(duplicate); }
public WorkSpaceClass() { NLIST_FILENAME = ""; ELIST_FILENAME = ""; TowerModelInstance = new TowerModel(); ROOT_DIR = ""; }
private static void AddToDataList(TowerModel towerModel) { var result = SessionData.CurrentSession.AllTowerData.FirstOrDefault(data => data.TowerModel == towerModel); if (result != null) { return; } var towerData = new TowerData() { TowerModel = towerModel, Radius = towerModel.radius, RadiusSquared = towerModel.radiusSquared }; var areaCount = towerModel.areaTypes.Count; towerData.AreaTypes = new Il2CppStructArray <AreaType>(areaCount); for (int i = 0; i < towerModel.areaTypes.Count; i++) { var areaType = towerModel.areaTypes[i]; towerData.AreaTypes[i] = areaType; } SessionData.CurrentSession.AllTowerData.Add(towerData); }
internal static bool Prefix(ref Tower __instance, ref Model modelToUse) { if (SessionData.CurrentSession.IsCheating) { return(true); } var settings = Settings.LoadedSettings; /*if (!settings.AllowedTowers.Contains(__instance.towerModel.name)) * return;*/ TowerModel newTower = null; for (int i = 0; i < 10; i++) { newTower = GetNewTower(); if (newTower != null) { break; } } if (newTower != null) { modelToUse = newTower; } return(true); }
public static int GetCostForThing(TowerModel towerModel) { var cost = Game.instance.model.GetTowerWithName(towerModel.name).cost; foreach (var appliedUpgrade in towerModel.GetAppliedUpgrades()) { cost += appliedUpgrade.cost; } switch (InGame.instance.SelectedDifficulty) { case "Easy": cost *= .85f; break; case "Hard": cost *= 1.08f; break; case "Impoppable": cost *= 1.2f; break; } cost *= 1 - .05f * towerModel.tier; return((int)(5 * Math.Round(cost / 5))); }
public static void Dreadnought(TowerModel model) { var attackModel = model.GetAttackModel(); var flameGrape = Game.instance.model.GetTower(MonkeyBuccaneer, 0, 2, 0).GetWeapons()[3] .projectile; foreach (var projectileModel in attackModel.GetAllProjectiles()) { if (projectileModel.name.Contains("Explosion") || projectileModel.GetDamageModel() == null) { continue; } projectileModel.collisionPasses = flameGrape.collisionPasses; projectileModel.AddBehavior(flameGrape.GetBehavior <AddBehaviorToBloonModel>().Duplicate()); if (model.appliedUpgrades.Contains("Buccaneer-Hot Shot")) { projectileModel.GetBehavior <AddBehaviorToBloonModel>().GetBehavior <DamageOverTimeModel>() .triggerImmediate = true; projectileModel.scale = .5f; } else { projectileModel.scale = .75f; } projectileModel.display = "c840e245a0b1deb4284cfc3f953e16cf"; projectileModel.GetDamageModel().damageTypes = new Il2CppStringArray(new[] { "Normal" }); } }
public static void MortarEmpowerment(TowerModel towerModel) { var sniper = Game.instance.model.GetTowerFromId(SniperMonkey); var attackModel = towerModel.GetAttackModel(); foreach (var sniperTargetType in sniper.targetTypes) { towerModel.targetTypes.Add(sniperTargetType); } var targetSelectedPointModel = attackModel.GetBehavior <TargetSelectedPointModel>(); attackModel.RemoveBehavior <TargetSelectedPointModel>(); attackModel.targetProvider = null; attackModel.AddBehavior(sniper.GetAttackModel().GetBehavior <TargetFirstModel>().Duplicate()); attackModel.AddBehavior(sniper.GetAttackModel().GetBehavior <TargetLastModel>().Duplicate()); attackModel.AddBehavior(sniper.GetAttackModel().GetBehavior <TargetCloseModel>().Duplicate()); attackModel.AddBehavior(sniper.GetAttackModel().GetBehavior <TargetStrongModel>().Duplicate()); attackModel.AddBehavior(targetSelectedPointModel); towerModel.towerSelectionMenuThemeId = "ActionButton"; /*var ageModel = towerModel.GetWeapon().projectile.GetBehavior<AgeModel>(); * if (ageModel != null) * { * ageModel.Lifespan /= 2; * }*/ }
// Use this for initialization void Start() { Instance = this; _controllers = new List <IController>(); Contexts contexts = Contexts.sharedInstance; GameContext context = contexts.game; _rootSystem = new RootSystem(contexts); _rootSystem.Initialize(); HexGenerator.Instance = GetComponent <HexGenerator>(); PlayerHealthModel = new PlayerHealthModel(20); PlayerHealthController PlayerHealthController = new PlayerHealthController { View = PlayerHealthView, Model = PlayerHealthModel, MainMenuUI = MainMenuUI }; PlayerHealthController.Init(); AboutController About = new AboutController { View = AboutView, AboutUI = AboutUI }; About.Init(); MainMenuController MainMenu = new MainMenuController { View = MainMenuView, MainMenuUI = MainMenuUI, AboutUI = AboutUI }; MainMenu.Init(); StartModel = new StartModel(); StartController start = new StartController { View = StartView, Model = StartModel }; start.Init(); CreateMoneyController(); TowerModel model = CreateTowerController(); CreateTiles(context, model); }