public void LoadEnemy() { if (enemyName.Contains("EngiTurret") || enemyName.Contains("BeetleGuardAlly") || enemyName.Contains("ShopkeeperMaster")) { return; } var gameobject = GameObject.Instantiate(MasterCatalog.FindMasterPrefab(enemyName + "Master")); var enemy = gameobject.GetComponent <CharacterMaster>(); var inventory = enemy.inventory; NetworkServer.Spawn(gameobject); if (enemyName == "BeetleQueen") { enemyName = "BeetleQueen2"; } enemy.SpawnBody(BodyCatalog.FindBodyPrefab(enemyName + "Body"), transform.position.GetVector3(), transform.rotation.GetQuaternion()); enemy.teamIndex = (TeamIndex)teamIndex; for (int i = 0; i < (int)ItemIndex.Count - 1; i++) { inventory.GiveItem((ItemIndex)i, items[i]); } inventory.SetEquipmentIndex((EquipmentIndex)equipmentIndex); enemy.isBoss = isBoss; if (enemyName.Contains("TitanGold")) { var bossFight = new GoldshoresBossfight(); var bossGroupGameObject = Object.Instantiate(Resources.Load <GameObject>("Prefabs/NetworkedObjects/Bossgroup")); var bossGroup = bossGroupGameObject.GetComponent <BossGroup>(); NetworkServer.Spawn(bossGroupGameObject); bossGroup.bossDropChance = 1f; bossGroup.dropPosition = GoldshoresMissionController.instance.bossSpawnPosition; bossGroup.combatSquad.AddMember(enemy); bossFight.SetFieldValue("bossGroup", bossGroup); bossFight.SetFieldValue("hasSpawnedBoss", true); bossFight.SetFieldValue("bossInstanceBody", enemy.GetBody()); enemy.GetBody().AddBuff(BuffIndex.Immune); GoldshoresMissionController.instance.GetComponent <EntityStateMachine>().SetNextState(bossFight); } else if (isBoss) { BossGroup.instance.combatSquad.AddMember(enemy); } SavedGames.instance.StartCoroutine(WaitForStart(enemy)); }
public CharacterMaster SummonHeretic(GameObject summonerBodyObject, Vector3 spawnPosition) { if (!NetworkServer.active) { Debug.LogWarning("[Server] function 'SummonHeretic(UnityEngine.GameObject)' called on client"); return(null); } MasterSummon masterSummon = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("HereticMonsterMaster"), position = spawnPosition, rotation = Quaternion.identity, summonerBodyObject = summonerBodyObject, ignoreTeamMemberLimit = true, useAmbientLevel = new bool?(true), }; CharacterMaster characterMaster = masterSummon.Perform(); if (characterMaster) { GameObject bodyObject = characterMaster.GetBodyObject(); if (bodyObject) { ModelLocator component = bodyObject.GetComponent <ModelLocator>(); if (component && component.modelTransform) { TemporaryOverlay temporaryOverlay = component.modelTransform.gameObject.AddComponent <TemporaryOverlay>(); temporaryOverlay.duration = 0.5f; temporaryOverlay.animateShaderAlpha = true; temporaryOverlay.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); temporaryOverlay.destroyComponentOnEnd = true; temporaryOverlay.originalMaterial = Resources.Load <Material>("Materials/matSummonDrone"); temporaryOverlay.AddToCharacerModel(component.modelTransform.GetComponent <CharacterModel>()); } var inventory = characterMaster.inventory; if (inventory) { inventory.CopyItemsFrom(summonerBodyObject.GetComponent <CharacterBody>().inventory); } } } if (characterMaster && characterMaster.bodyInstanceObject) { characterMaster.GetBody().AddTimedBuff(RoR2Content.Buffs.Immune, 3f); GameObject gameObject = Resources.Load <GameObject>("Prefabs/Effects/HippoRezEffect"); if (gameObject) { EffectManager.SpawnEffect(gameObject, new EffectData { origin = spawnPosition, rotation = characterMaster.bodyInstanceObject.transform.rotation }, true); } } return(characterMaster); }
private static void CCSpawnAI(ConCommandArgs args) { string prefabString = ArgsHelper.GetValue(args.userArgs, 0); string eliteString = ArgsHelper.GetValue(args.userArgs, 1); string teamString = ArgsHelper.GetValue(args.userArgs, 2); string braindeadString = ArgsHelper.GetValue(args.userArgs, 3); var character = Character.GetCharacter(prefabString); if (character == null) { Debug.LogFormat("Could not spawn {0}, Try: spawn_ai GolemBody", character.body); return; } var prefab = MasterCatalog.FindMasterPrefab(character.master); var body = BodyCatalog.FindBodyPrefab(character.body); var bodyGameObject = Instantiate <GameObject>(prefab, args.sender.master.GetBody().transform.position, Quaternion.identity); CharacterMaster master = bodyGameObject.GetComponent <CharacterMaster>(); NetworkServer.Spawn(bodyGameObject); master.SpawnBody(body, args.sender.master.GetBody().transform.position, Quaternion.identity); EliteIndex eliteIndex = EliteIndex.None; if (Enum.TryParse <EliteIndex>(eliteString, true, out eliteIndex)) { if ((int)eliteIndex > (int)EliteIndex.None && (int)eliteIndex < (int)EliteIndex.Count) { master.inventory.SetEquipmentIndex(EliteCatalog.GetEliteDef(eliteIndex).eliteEquipmentIndex); } } TeamIndex teamIndex = TeamIndex.Neutral; if (Enum.TryParse <TeamIndex>(teamString, true, out teamIndex)) { if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count) { master.teamIndex = teamIndex; } } bool braindead; if (bool.TryParse(braindeadString, out braindead)) { if (braindead) { Destroy(master.GetComponent <BaseAI>()); } } Debug.Log("Attempting to spawn " + character.body); }
public void Start() { if (!itemStealController) { itemStealController = returnStolenItems.itemStealController; } itemStealController.onStealFinishClient += ItemStealController_onStealFinishClient; masterPrefab = MasterCatalog.FindMasterPrefab("EquipmentDroneMaster"); }
private void UnlockingMage_onOpenedsss(Interactor obj) { CharacterMaster characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("MageMonsterMaster"), position = obj.gameObject.transform.position, rotation = Quaternion.identity, summonerBodyObject = null, ignoreTeamMemberLimit = false, teamIndexOverride = new TeamIndex?(TeamIndex.Player) }.Perform(); }
public override void OnExit() { if (this.goodPlacement && base.characterBody.isPlayerControlled) { Util.PlaySound(CreatePounder.fireSoundString, base.gameObject); if (this.areaIndicatorInstance && NetworkServer.active) { CharacterMaster characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("MercMonsterMaster"), position = base.characterBody.transform.position, rotation = characterBody.transform.rotation, summonerBodyObject = base.gameObject, ignoreTeamMemberLimit = true, teamIndexOverride = characterBody.teamComponent.teamIndex }.Perform(); base.skillLocator.utility.DeductStock(1); base.characterMotor.Motor.SetPosition(areaIndicatorInstance.transform.position); EffectData effectData = new EffectData(); effectData.rotation = Util.QuaternionSafeLookRotation(areaIndicatorInstance.transform.position - base.characterMotor.transform.position); effectData.origin = base.characterMotor.transform.position; EffectManager.SpawnEffect(EntityStates.Huntress.BlinkState.blinkPrefab, effectData, false); EffectData effectData2 = new EffectData(); effectData.rotation = Util.QuaternionSafeLookRotation(areaIndicatorInstance.transform.position - base.characterMotor.transform.position); effectData.origin = areaIndicatorInstance.transform.position; EffectManager.SpawnEffect(EntityStates.Huntress.BlinkState.blinkPrefab, effectData, false); base.characterBody.AddTimedBuff(BuffIndex.Cloak, 5f); base.characterBody.AddTimedBuff(BuffIndex.ElephantArmorBoost, 3f); base.characterBody.AddTimedBuff(BuffIndex.Immune, 2f); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 0, (uint)Random.Range(0, characterBody.skillLocator.primary.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 1, (uint)Random.Range(0, characterBody.skillLocator.secondary.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 2, (uint)Random.Range(0, characterBody.skillLocator.utility.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 3, (uint)Random.Range(0, characterBody.skillLocator.special.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkinIndex(characterBody.bodyIndex, (uint)Random.Range(0, SkinCatalog.GetBodySkinCount(characterBody.bodyIndex))); characterMaster.GetBody().baseDamage = 0f; characterMaster.inventory.GiveItem(ItemIndex.HealthDecay, 10); characterMaster.GetBody().inventory.SetEquipmentIndex(EquipmentIndex.AffixHaunted); } } EntityState.Destroy(this.areaIndicatorInstance.gameObject); base.characterBody.crosshairPrefab = this.cachedCrosshairPrefab; base.OnExit(); this.outer.SetNextStateToMain(); }
////// Hooks ////// private void GlobalEventManager_OnHitEnemy(On.RoR2.GlobalEventManager.orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { orig(self, damageInfo, victim); if (NetworkServer.active && damageInfo != null && damageInfo.attacker) { var count = GetCount(damageInfo.attacker.GetComponent <CharacterBody>()); var victimBody = victim.GetComponent <CharacterBody>(); if (count > 0 && damageInfo.attacker != victim && victimBody && !victimBody.gameObject.name.Contains("Brother") && !victimBody.gameObject.name.Contains("VoidRaidCrab") && !victimBody.gameObject.name.Contains("ScavLunar") && victimBody.master && victimBody.master.inventory && victimBody.master.inventory.GetItemCount(gupDebuff) < count) { var sricd = damageInfo.attacker.GetComponent <ShrinkRayICDComponent>(); if (!sricd) { sricd = damageInfo.attacker.AddComponent <ShrinkRayICDComponent>(); } if (Time.fixedTime - sricd.lastHit > icd) { sricd.lastHit = Time.fixedTime; victimBody.master.inventory.GiveItem(gupDebuff); EffectManager.SpawnEffect(EntityStates.Gup.BaseSplitDeath.deathEffectPrefab, new EffectData { origin = victim.GetComponent <CharacterBody>().corePosition, scale = 10f }, true); var masterPrefab = MasterCatalog.GetMasterPrefab(victimBody.master.masterIndex); currentSplitIsGupRay = true; new BodySplitter { body = victimBody, masterSummon = { masterPrefab = masterPrefab }, count = splitCount, splinterInitialVelocityLocal = new Vector3(0f, 20f, 10f), minSpawnCircleRadius = 3f, moneyMultiplier = 1f / (float)splitCount }.Perform(); currentSplitIsGupRay = false; if (victimBody.master) { victimBody.master.TrueKill(); } GameObject.Destroy(victimBody.gameObject); } } } }
public override void OnExit() { if (this.goodPlacement && base.characterBody.isPlayerControlled) { Util.PlaySound(CreatePounder.fireSoundString, base.gameObject); if (this.areaIndicatorInstance && NetworkServer.active) { if (editedPounder == null) { editedPounder = CreatePounder.projectilePrefab; } bool crit = Util.CheckRoll(this.critStat, base.characterBody.master); int cacheNumToSpawn = base.skillLocator.special.stock; for (int i = 0; i < cacheNumToSpawn; i++) { CharacterMaster characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("MercMonsterMaster"), position = areaIndicatorInstance.transform.position, rotation = characterBody.transform.rotation, summonerBodyObject = base.gameObject, ignoreTeamMemberLimit = false, teamIndexOverride = characterBody.teamComponent.teamIndex }.Perform(); base.skillLocator.special.DeductStock(1); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 0, (uint)Random.Range(0, characterBody.skillLocator.primary.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 1, (uint)Random.Range(0, characterBody.skillLocator.secondary.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 2, (uint)Random.Range(0, characterBody.skillLocator.utility.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkillVariant(characterBody.bodyIndex, 3, (uint)Random.Range(0, characterBody.skillLocator.special.skillFamily.variants.Length)); characterMaster.loadout.bodyLoadoutManager.SetSkinIndex(characterBody.bodyIndex, (uint)Random.Range(0, SkinCatalog.GetBodySkinCount(characterBody.bodyIndex))); characterMaster.inventory.CopyItemsFrom(base.characterBody.inventory); characterMaster.inventory.GiveItem(ItemIndex.HealthDecay, 15); } } } EntityState.Destroy(this.areaIndicatorInstance.gameObject); base.characterBody.crosshairPrefab = this.cachedCrosshairPrefab; base.OnExit(); this.outer.SetNextStateToMain(); }
private static void SetToRail() { BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Toolbot.FireSpear); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseAttackSpeed = 0.5f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseDamage = 13f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().levelDamage = 2.12f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseNameToken = "Portable Railgun"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].maxDistance = 1024; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].activationRequiresTargetLoS = true; } } }
private static void CCSpawnAI(ConCommandArgs args) { if (args.Count == 0) { Log.Message(MagicVars.SPAWNAI_ARGS); return; } string character = Alias.Instance.GetMasterName(args[0]); if (character == null) { Log.Message(MagicVars.SPAWN_ERROR + character); return; } var masterprefab = MasterCatalog.FindMasterPrefab(character); var body = masterprefab.GetComponent <CharacterMaster>().bodyPrefab; var bodyGameObject = Instantiate <GameObject>(masterprefab, args.sender.master.GetBody().transform.position, Quaternion.identity); CharacterMaster master = bodyGameObject.GetComponent <CharacterMaster>(); NetworkServer.Spawn(bodyGameObject); master.SpawnBody(body, args.sender.master.GetBody().transform.position, Quaternion.identity); if (args.Count > 1) { var eliteIndex = Alias.GetEnumFromPartial <EliteIndex>(args[1]); master.inventory.SetEquipmentIndex(EliteCatalog.GetEliteDef(eliteIndex).eliteEquipmentIndex); master.inventory.GiveItem(ItemIndex.BoostHp, Mathf.RoundToInt((GetTierDef(eliteIndex).healthBoostCoefficient - 1) * 10)); master.inventory.GiveItem(ItemIndex.BoostDamage, Mathf.RoundToInt((GetTierDef(eliteIndex).damageBoostCoefficient - 1) * 10)); } if (args.Count > 2 && Enum.TryParse <TeamIndex>(Alias.GetEnumFromPartial <TeamIndex>(args[2]).ToString(), true, out TeamIndex teamIndex)) { if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count) { master.teamIndex = teamIndex; } } if (args.Count > 3 && bool.TryParse(args[3], out bool braindead) && braindead) { Destroy(master.GetComponent <BaseAI>()); } Log.Message(MagicVars.SPAWN_ATTEMPT + character); }
private void SetToMinigun() { BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Commando.CommandoWeapon.Reload).Assembly.GetType("EntityStates.Drone.DroneWeapon.FireMegaTurret"); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseAttackSpeed = MiniGun_speed; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseDamage = miniGun_damage; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().levelDamage = miniGun_leveldamage; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseNameToken = ".50 Cal Maxim"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].maxDistance = MiniGun_distance; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].activationRequiresTargetLoS = true; } } }
public static void SpawnMasterWithBody(string masterPrefab, string bodyPrefab, Vector3 pos, TeamIndex team, Inventory inv = null) { GameObject obj = GameObject.Instantiate(MasterCatalog.FindMasterPrefab(masterPrefab), pos, Quaternion.identity); GameObject bodyObj = BodyCatalog.FindBodyPrefab(bodyPrefab); CharacterMaster master = obj.GetComponent <CharacterMaster>(); master.teamIndex = team; if (inv != null) { master.inventory.CopyItemsFrom(inv); } NetworkServer.Spawn(obj); master.SpawnBody(bodyObj, pos, Quaternion.identity); spawns.Add(master); }
public override void OnEnter() { base.OnEnter(); this.duration = HEALINGPAIN.baseDuration / this.attackSpeedStat; if (isAuthority && NetworkServer.active) { CharacterMaster characterMaster; characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("Drone2Master"), position = base.characterBody.footPosition + base.transform.up, rotation = base.transform.rotation, summonerBodyObject = null, ignoreTeamMemberLimit = false, teamIndexOverride = TeamIndex.Monster }.Perform(); } }
public void OnReceived() { if (_body && _body.master) { var dispMaster = new MasterSummon { masterPrefab = MasterCatalog.GetMasterPrefab(_masterIndex), position = _pos, rotation = _rot, summonerBodyObject = _body.gameObject, ignoreTeamMemberLimit = true, inventoryToCopy = _body.inventory }.Perform(); Deployable deployable = dispMaster.gameObject.AddComponent <Deployable>(); deployable.onUndeploy = new UnityEvent(); deployable.onUndeploy.AddListener(new UnityAction(dispMaster.TrueKill)); _body.master.AddDeployable(deployable, EngiUtilitySpeedispenser.instance.deployableSlot); } }
private void SetToDefault() { BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Commando.CommandoWeapon.Reload).Assembly.GetType("EntityStates.EngiTurret.EngiTurretWeapon.FireGauss"); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseAttackSpeed = defaultspeed; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseDamage = defaultdamage; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().levelDamage = defaultleveldamage; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent<CharacterBody>().baseNameToken = "Weak Boi Default"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].maxDistance = 60; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents<AISkillDriver>()[i].activationRequiresTargetLoS = true; } } }
public void LoadDeployable(CharacterMaster playerMaster) { switch (name) { case "BeetleGuardAllyBody": { var beetleMaster = GameObject.Instantiate(MasterCatalog.FindMasterPrefab("BeetleGuardAllyMaster")).GetComponent <CharacterMaster>(); NetworkServer.Spawn(beetleMaster.gameObject); var beetleBody = beetleMaster.SpawnBody(BodyCatalog.FindBodyPrefab("BeetleGuardAllyBody"), transform.position.GetVector3(), transform.rotation.GetQuaternion()); var inventory = beetleMaster.inventory; inventory.GiveItem(ItemIndex.BoostDamage, 30); inventory.GiveItem(ItemIndex.BoostHp, 10); playerMaster.AddDeployable(beetleBody.GetComponent <Deployable>(), DeployableSlot.BeetleGuardAlly); beetleMaster.teamIndex = TeamIndex.Player; break; } case "EngiTurretMaster": { var turretMaster = GameObject.Instantiate(MasterCatalog.FindMasterPrefab("EngiTurretMaster")).GetComponent <CharacterMaster>(); NetworkServer.Spawn(turretMaster.gameObject); var inventory = turretMaster.inventory; inventory.CopyItemsFrom(playerMaster.inventory); inventory.ResetItem(ItemIndex.WardOnLevel); inventory.ResetItem(ItemIndex.BeetleGland); inventory.ResetItem(ItemIndex.CrippleWardOnLevel); var deployable = turretMaster.gameObject.AddComponent <Deployable>(); deployable.onUndeploy = new UnityEngine.Events.UnityEvent(); deployable.onUndeploy.AddListener(new UnityEngine.Events.UnityAction(turretMaster.TrueKill)); playerMaster.AddDeployable(deployable, DeployableSlot.EngiTurret); var turretBody = turretMaster.SpawnBody(BodyCatalog.FindBodyPrefab("EngiTurretBody"), transform.position.GetVector3(), transform.rotation.GetQuaternion()); Debug.Log(transform.position.GetVector3()); turretMaster.transform.position = transform.position.GetVector3(); turretMaster.teamIndex = TeamIndex.Player; SavedGames.instance.StartCoroutine(WaitForStart(turretBody)); break; } } }
static void HandleDropItem(NetworkMessage netMsg) { var dropItem = netMsg.ReadMessage <SummonClone>(); var master = dropItem.Player.GetComponent <CharacterBody>().master; CharacterBody component = dropItem.Player.GetComponent <CharacterBody>(); GameObject gameObject = MasterCatalog.FindMasterPrefab("MercMonsterMaster"); GameObject bodyPrefab = BodyCatalog.FindBodyPrefab("MercBody"); for (int i = 0; i < 2; i++) { if (master) { GameObject gameObject2 = Instantiate(gameObject, component.transform.position, component.transform.rotation); CharacterMaster component2 = gameObject2.GetComponent <CharacterMaster>(); component2.gameObject.AddComponent <MasterSuicideOnTimer>().lifeTimer = 8f; component2.teamIndex = TeamComponent.GetObjectTeam(component.gameObject); AIOwnership component4 = gameObject2.GetComponent <AIOwnership>(); BaseAI component5 = gameObject2.GetComponent <BaseAI>(); if (component4) { component4.ownerMaster = master; } if (component5) { component5.leader.gameObject = master.gameObject; } Inventory component6 = gameObject2.GetComponent <Inventory>(); component6.CopyItemsFrom(master.inventory); component6.ResetItem(ItemIndex.BeetleGland); component6.ResetItem(ItemIndex.WardOnLevel); component6.ResetItem(ItemIndex.AutoCastEquipment); component6.ResetItem(ItemIndex.ExtraLife); NetworkServer.Spawn(gameObject2); CharacterBody body = component2.SpawnBody(bodyPrefab, component.transform.position, component.transform.rotation); } } }
private void UnlockingMage_onOpened(Interactor obj) { GameObject mageMasterPrefab = MasterCatalog.FindMasterPrefab("MageMonsterMaster"); GameObject mageBodyPrefab = mageMasterPrefab.GetComponent <CharacterMaster>().bodyPrefab; GameObject mageMasterGameObject = UnityEngine.Object.Instantiate(mageMasterPrefab, gameObject.transform.position, Quaternion.identity); GameObject mageBodyGameObject = UnityEngine.Object.Instantiate(mageBodyPrefab, gameObject.transform.position, Quaternion.identity); CharacterMaster mageCharacterMaster = mageBodyGameObject.GetComponent <CharacterMaster>(); mageCharacterMaster.bodyPrefab = mageBodyGameObject; AIOwnership mageAIOwnership = mageBodyGameObject.GetComponent <AIOwnership>(); CharacterMaster playerMaster = obj.gameObject.GetComponent <CharacterBody>().master; BaseAI mageBaseAI = gameObject.GetComponent <BaseAI>(); if (mageCharacterMaster) { mageCharacterMaster.inventory.GiveItem(ItemIndex.BoostDamage, 10); mageCharacterMaster.inventory.GiveItem(ItemIndex.BoostHp, 10); GameObject bodyObject = playerMaster.GetBodyObject(); if (bodyObject) { Deployable component4 = mageBodyGameObject.GetComponent <Deployable>(); if (!component4) { component4 = mageBodyGameObject.AddComponent <Deployable>(); } playerMaster.AddDeployable(component4, DeployableSlot.ParentAlly); } } if (mageAIOwnership) { mageAIOwnership.ownerMaster = obj.gameObject.GetComponent <CharacterBody>().master; } if (mageBaseAI) { mageBaseAI.leader.gameObject = base.gameObject; } NetworkServer.Spawn(mageBodyGameObject); mageCharacterMaster.SpawnBody(mageBodyGameObject, gameObject.transform.position, Quaternion.identity); }
public override void OnEnter() { base.OnEnter(); base.characterBody.isSprinting = true; this.dashVector = -base.characterDirection.forward; Util.PlaySound("HenryStinger", base.gameObject); base.PlayAnimation("Gesture, Override", "BufferEmpty"); base.gameObject.layer = LayerIndex.fakeActor.intVal; base.characterMotor.Motor.RebuildCollidableLayers(); if (NetworkServer.active) { //base.characterBody.AddBuff(BuffIndex.HiddenInvincibility); CharacterMaster newCloneMaster = new MasterSummon { masterPrefab = MasterCatalog.GetMasterPrefab(MasterCatalog.FindMasterIndex("MrGreenCloneMaster")), position = base.transform.position, rotation = base.modelLocator.modelBaseTransform.rotation, summonerBodyObject = base.gameObject, ignoreTeamMemberLimit = true }.Perform(); Inventory inventory = newCloneMaster.inventory; inventory.CopyItemsFrom(base.characterBody.master.inventory); /*inventory.ResetItem(ItemIndex.WardOnLevel); * inventory.ResetItem(ItemIndex.BeetleGland); * inventory.ResetItem(ItemIndex.CrippleWardOnLevel); * inventory.ResetItem(ItemIndex.TPHealingNova); * inventory.ResetItem(ItemIndex.FocusConvergence); * inventory.ResetItem(ItemIndex.TitanGoldDuringTP);*/ var delayedDamage = newCloneMaster.gameObject.AddComponent <Modules.Components.DelayedDamageOnSpawn>(); delayedDamage.attacker = this.attacker; delayedDamage.damage = this.storedDamage; delayedDamage.tracker = this.tracker; } }
private void buttonLogin_Click(object sender, EventArgs e) { try { this.Cursor = Cursors.WaitCursor; string emailAddress = textBoxEmail.Text; string password = textBoxPassword.Text; var accountInfo = Account.Login(emailAddress, password); DisplayStatus("Log in successful.\r\nSelect sandbox..."); SandboxSelector dialog = new SandboxSelector(accountInfo); if (dialog.ShowDialog(this) == DialogResult.OK) { Scope selected = dialog.Sandbox; Tenant tenant = Account.GetTenant(selected.Id); Site site = tenant.Sites[0]; MasterCatalog masterCatalog = tenant.MasterCatalogs[0]; _apiContext = new ApiContext(tenant.Id, site.Id, masterCatalogId: masterCatalog.Id, catalogId: site.CatalogId); DisplayStatus(string.Format("Tenant: {0}\r\nName:{1}\r\nIsDevTenant:{2}\r\nSite:{3}\r\nMasterCatalog:{4}", tenant.Id, tenant.Name, tenant.IsDevTenant, tenant.Sites[0].Name, tenant.MasterCatalogs[0].Name )); } } catch (Exception ex) { DisplayStatus(ex); } // Reset the cursor this.Cursor = Cursors.Default; }
//Loads minion after scene was populated //so that minion's AI won't throw exceptions because it can't navigate public void LoadMinion(CharacterMaster playerMaster) { SceneDirector.onPostPopulateSceneServer += SpawnMinion; void SpawnMinion(SceneDirector obj) { SceneDirector.onPostPopulateSceneServer -= SpawnMinion; var masterPrefab = MasterCatalog.GetMasterPrefab((MasterCatalog.MasterIndex)masterIndex); var minionGameObject = Object.Instantiate(masterPrefab); CharacterMaster minionMaster = minionGameObject.GetComponent <CharacterMaster>(); minionMaster.teamIndex = TeamIndex.Player; //MinionOwnership var newOwnerMaster = playerMaster; if (newOwnerMaster.minionOwnership.ownerMaster != null) { newOwnerMaster = newOwnerMaster.minionOwnership.ownerMaster; } minionMaster.minionOwnership.SetOwner(newOwnerMaster); //AIOwnership var aiOwnership = minionGameObject.GetComponent <AIOwnership>(); aiOwnership.ownerMaster = playerMaster; BaseAI baseAI = minionGameObject.GetComponent <BaseAI>(); baseAI.leader.gameObject = playerMaster.gameObject; NetworkServer.Spawn(minionGameObject); inventory.LoadInventory(minionMaster); } }
public static bool Init() { On.RoR2.CharacterMaster.GetDeployableSameSlotLimit += (orig, self, slot) => { if (slot == (DeployableSlot)7) { return(self.inventory.GetItemCount(ItemIndex.EquipmentMagazine)); } return(orig(self, slot)); }; On.RoR2.EquipmentSlot.PerformEquipmentAction += (orig, self, equipmentIndex) => { CharacterBody characterBody = self.characterBody; string characterMaster = ""; bool temp = orig(self, equipmentIndex); if (self.characterBody.inputBank.activateEquipment.justPressed) { switch (equipmentIndex) { case EquipmentIndex.AffixWhite: { characterMaster = "BisonMaster"; temp = true; } break; case EquipmentIndex.AffixGold: { characterMaster = "TitanGoldMaster"; temp = true; } break; case EquipmentIndex.AffixHaunted: { characterMaster = "BellMaster"; temp = true; } break; case EquipmentIndex.AffixPoison: { characterMaster = "ImpMaster"; temp = true; } break; case EquipmentIndex.AffixRed: { characterMaster = "LemurianMaster"; } break; case EquipmentIndex.AffixBlue: { characterMaster = "WispMaster"; } break; case EquipmentIndex.AffixYellow: { characterMaster = "ElectricWormMaster"; temp = true; } break; } if (characterMaster != "") { CharacterMaster newcharacterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab(characterMaster), position = characterBody.footPosition + characterBody.transform.up, rotation = characterBody.transform.rotation, summonerBodyObject = null, ignoreTeamMemberLimit = true, teamIndexOverride = characterBody.teamComponent.teamIndex }.Perform(); newcharacterMaster.inventory.CopyItemsFrom(characterBody.inventory); newcharacterMaster.inventory.ResetItem(ItemIndex.AutoCastEquipment); newcharacterMaster.inventory.CopyEquipmentFrom(characterBody.inventory); newcharacterMaster.GetBody().modelLocator.modelBaseTransform.localScale *= 0.25f; Deployable deployable = newcharacterMaster.gameObject.GetComponent <Deployable>(); if (!deployable) { deployable = newcharacterMaster.gameObject.AddComponent <Deployable>(); } int deployableCount = characterBody.master.GetDeployableCount((DeployableSlot)7); self.characterBody.master.AddDeployable(deployable, (DeployableSlot)7); deployable.onUndeploy = new UnityEngine.Events.UnityEvent(); deployable.onUndeploy.AddListener(() => newcharacterMaster.TrueKill()); } } return(temp); }; return(true); }
private bool PerformEquipmentActionInternal(EquipmentSlot slot) { var candidates = CharacterMaster.readOnlyInstancesList.Where(x => x.IsDeadAndOutOfLivesServer() && x.teamIndex == TeamIndex.Player); GameObject obj; GameObject podPrefab = LegacyResourcesAPI.Load <GameObject>("Prefabs/NetworkedObjects/RoboCratePod"); var nodeGraph = SceneInfo.instance.GetNodeGraph(MapNodeGroup.GraphType.Ground); var nodeInd = nodeGraph.FindClosestNodeWithFlagConditions(slot.transform.position, HullClassification.Human, NodeFlags.None, NodeFlags.None, false); Vector3 nodePos = slot.transform.position; Quaternion nodeRot = Quaternion.identity; if (nodeGraph.GetNodePosition(nodeInd, out nodePos)) { var targPos = slot.transform.position; targPos.y = nodePos.y; nodeRot = Util.QuaternionSafeLookRotation(nodePos - targPos); } if (candidates.Count() > 0) { var which = rng.NextElementUniform(candidates.ToArray()); var newBody = which.Respawn(nodePos, nodeRot); if (!newBody) { return(false); } obj = newBody.gameObject; string rezTargetName = Language.GetString(newBody.baseNameToken); var newBodyUser = Util.LookUpBodyNetworkUser(newBody); if (newBodyUser) { rezTargetName = newBodyUser.userName; } var rezzerName = slot.characterBody ? Language.GetString(slot.characterBody.baseNameToken) : "Someone"; var rezzerUser = Util.LookUpBodyNetworkUser(slot.characterBody); if (rezzerUser) { rezzerName = rezzerUser.userName; } NetUtil.ServerSendGlobalChatMsg($"{rezzerName} called down a clone of {rezTargetName}!"); } else { var whichName = rng.NextElementUniform(droneMasterPrefabNames.ToArray()); var whichIndex = MasterCatalog.FindMasterIndex(whichName); var which = MasterCatalog.GetMasterPrefab(whichIndex); if (!which) { return(false); } var summon = new MasterSummon { masterPrefab = which, position = nodePos, rotation = nodeRot, summonerBodyObject = slot.characterBody ? slot.characterBody.gameObject : null, ignoreTeamMemberLimit = true, useAmbientLevel = new bool?(true) }.Perform(); if (!summon) { return(false); } obj = summon.GetBodyObject(); if (!obj) { return(false); } if (obj.name == "EquipmentDroneBody(Clone)") { var droneInv = obj.GetComponent <Inventory>(); if (droneInv) { var randomEqp = rng.NextElementUniform(RoR2.Artifacts.EnigmaArtifactManager.validEquipment); droneInv.SetEquipment(new EquipmentState(randomEqp, Run.FixedTimeStamp.negativeInfinity, 1), 0); } } else if (which == ItemDrone.instance.itemDroneMasterPrefab) { var wardPersist = summon.GetComponent <ItemDroneWardPersist>(); var drops = LegacyResourcesAPI.Load <BasicPickupDropTable>("DropTables/dtSmallChest"); var drop = drops.GenerateDrop(rng); var pdef = PickupCatalog.GetPickupDef(drop); if (wardPersist && pdef != null && pdef.itemIndex != ItemIndex.None) { int remCount = 1; if (pdef.itemTier == ItemTier.Tier2 || pdef.itemTier == ItemTier.VoidTier2) { remCount = 3; } if (pdef.itemTier == ItemTier.Tier1 || pdef.itemTier == ItemTier.VoidTier1) { remCount = 5; } wardPersist.index = pdef.itemIndex; wardPersist.count = remCount; } } } if (!obj) { return(false); } var objBody = obj.GetComponent <CharacterBody>(); var podObj = GameObject.Instantiate(podPrefab, nodePos, nodeRot); var podSeat = podObj.GetComponent <VehicleSeat>(); if (podSeat) { podSeat.AssignPassenger(obj); } else { TinkersSatchelPlugin._logger.LogError($"Pod {podObj} spawned for revived prefab {obj} has no seat!"); } NetworkServer.Spawn(podObj); objBody.SetBodyStateToPreferredInitialState(); slot.inventory.SetEquipment(new EquipmentState(EquipmentIndex.None, Run.FixedTimeStamp.now + cooldown, 0), (uint)slot.inventory.activeEquipmentSlot); return(true); }
private static void CCSpawnAI(ConCommandArgs args) { GameObject prefab; GameObject body; GameObject gameObject = null; string prefabString = ArgsHelper.GetValue(args.userArgs, 0); string eliteString = ArgsHelper.GetValue(args.userArgs, 1); string teamString = ArgsHelper.GetValue(args.userArgs, 2); string braindeadString = ArgsHelper.GetValue(args.userArgs, 3); string bodyString = GetBodyMasterLink(prefabString, 0); //prefabString.Replace("Master", ""); string masterString = GetBodyMasterLink(prefabString, 1); //prefabString.Replace("Body", ""); prefab = MasterCatalog.FindMasterPrefab(masterString); body = BodyCatalog.FindBodyPrefab(bodyString); if (prefab == null) { List <string> array = new List <string>(); foreach (var item in MasterCatalog.allMasters) { array.Add(item.name); } string list = string.Join("\n", array); Debug.LogFormat("Could not spawn {0}, Try: spawn_ai GolemBody --- \n{1}", prefabString, list); return; } gameObject = Instantiate <GameObject>(prefab, args.sender.master.GetBody().transform.position, Quaternion.identity); CharacterMaster master = gameObject.GetComponent <CharacterMaster>(); NetworkServer.Spawn(gameObject); master.SpawnBody(body, args.sender.master.GetBody().transform.position, Quaternion.identity); EliteIndex eliteIndex = EliteIndex.None; if (Enum.TryParse <EliteIndex>(eliteString, true, out eliteIndex)) { if ((int)eliteIndex > (int)EliteIndex.None && (int)eliteIndex < (int)EliteIndex.Count) { master.inventory.SetEquipmentIndex(EliteCatalog.GetEliteDef(eliteIndex).eliteEquipmentIndex); } } TeamIndex teamIndex = TeamIndex.Neutral; if (Enum.TryParse <TeamIndex>(teamString, true, out teamIndex)) { if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count) { master.teamIndex = teamIndex; } } bool braindead; if (bool.TryParse(braindeadString, out braindead)) { if (braindead) { Destroy(master.GetComponent <BaseAI>()); } } Debug.Log("Attempting to spawn " + prefabString); }
// Token: 0x06002C6E RID: 11374 RVA: 0x0002168E File Offset: 0x0001F88E public override void OnExit() { if (base.isAuthority) { base.characterBody.SendConstructTurret(base.characterBody, base.characterBody.corePosition + (3f * Vector3.up), base.characterBody.gameObject.transform.rotation, MasterCatalog.FindMasterIndex("RoboBallMiniMaster")); } base.OnExit(); }
// Token: 0x06003136 RID: 12598 RVA: 0x000D3F50 File Offset: 0x000D2150 public override void FixedUpdate() { base.FixedUpdate(); if (base.isAuthority) { this.entryCountdown -= Time.fixedDeltaTime; if (this.exitPending) { this.exitCountdown -= Time.fixedDeltaTime; if (this.exitCountdown <= 0f) { this.outer.SetNextStateToMain(); return; } } else if (base.inputBank && this.entryCountdown <= 0f) { if ((base.inputBank.skill1.down || base.inputBank.skill4.justPressed) && this.currentPlacementInfo.ok) { if (base.characterBody) { base.characterBody.SendConstructTurret(base.characterBody, this.currentPlacementInfo.position, this.currentPlacementInfo.rotation, MasterCatalog.FindMasterIndex(this.turretMasterPrefab)); if (base.skillLocator) { GenericSkill skill = base.skillLocator.GetSkill(SkillSlot.Special); if (skill) { skill.DeductStock(1); } } } Util.PlaySound(this.placeSoundString, base.gameObject); this.DestroyBlueprints(); this.exitPending = true; } if (base.inputBank.skill2.justPressed) { this.DestroyBlueprints(); this.exitPending = true; } } } }
public override void OnEnter() { base.OnEnter(); base.characterBody.SendConstructTurret(base.characterBody, base.characterBody.corePosition + Vector3.up, Quaternion.identity, MasterCatalog.FindMasterIndex("RoboBallMiniMaster")); base.OnExit(); }
public override void OnEnter() { base.OnEnter(); Ray aimRay = base.GetAimRay(); this.duration = this.baseDuration / this.attackSpeedStat; if (this.effectPrefab) { EffectManager.SimpleMuzzleFlash(this.effectPrefab, base.gameObject, muzzleLeft, false); EffectManager.SimpleMuzzleFlash(this.effectPrefab, base.gameObject, muzzleRight, false); } base.PlayAnimation("Gesture", "FireCannons", "FireCannons.playbackRate", this.duration); if (base.isAuthority && base.modelLocator && base.modelLocator.modelTransform) { if (base.modelLocator.modelTransform.GetComponent <ChildLocator>()) { ChildLocator childLocator = base.modelLocator.modelTransform.GetComponent <ChildLocator>(); //literally compiler names but who will look at this code anyways? int muzzleLeftShildIndex = childLocator.FindChildIndex(muzzleLeft); int muzzleRightChildIndex = childLocator.FindChildIndex(muzzleRight); Transform muzzleLeftTransform = childLocator.FindChild(muzzleLeftShildIndex); Transform muzzleRightTransform = childLocator.FindChild(muzzleRightChildIndex); if (muzzleLeftTransform) { CharacterMaster characterMaster; characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("WispMaster"), position = muzzleLeftTransform.position, rotation = muzzleLeftTransform.rotation, summonerBodyObject = null, ignoreTeamMemberLimit = true, teamIndexOverride = TeamIndex.Monster }.Perform(); AIOwnership component4 = characterMaster.gameObject.GetComponent <AIOwnership>(); BaseAI component5 = characterMaster.gameObject.GetComponent <BaseAI>(); if (component4 && characterBody.master) { component4.ownerMaster = base.characterBody.master; } if (component5 && characterBody.master.gameObject) { component5.leader.gameObject = base.characterBody.master.gameObject; component5.isHealer = false; component5.fullVision = true; } } if (muzzleRightTransform) { CharacterMaster characterMaster; characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("WispMaster"), position = muzzleRightTransform.position, rotation = muzzleRightTransform.rotation, summonerBodyObject = null, ignoreTeamMemberLimit = true, teamIndexOverride = TeamIndex.Monster }.Perform(); AIOwnership component4 = characterMaster.gameObject.GetComponent <AIOwnership>(); BaseAI component5 = characterMaster.gameObject.GetComponent <BaseAI>(); if (component4 && characterBody.master) { component4.ownerMaster = base.characterBody.master; } if (component5 && characterBody.master.gameObject) { component5.leader.gameObject = base.characterBody.master.gameObject; component5.isHealer = false; component5.fullVision = true; } } } } }
internal static GameObject[] BuildMasterCatalog() { MasterCatalog.AddRange(Resources.LoadAll <GameObject>("Prefabs/CharacterMasters/")); return(MasterCatalog.ToArray()); }
public void Awake()//Code that runs when the game starts { var addRule = typeof(RuleCatalog).GetMethod("AddRule", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[] { typeof(RuleDef) }, null); var addCategory = typeof(RuleCatalog).GetMethod("AddCategory", BindingFlags.Static | BindingFlags.NonPublic, null, new Type[] { typeof(string), typeof(Color), typeof(string), typeof(Func <bool>) }, null); Color mycolor = new Color(0.3f, 0f, 0.5f); //Creates a header for the mod itself addCategory.Invoke(null, new object[] { "Ryan's Turrets", mycolor, "A Fun mod for custom turrets", new Func <bool>(() => false) }); //Create a header for the category, such as 'Huntress edits' addCategory.Invoke(null, new object[] { "Turret Type Config", mycolor, "", new Func <bool>(() => false) }); //Creates a rule and an accessible variable RuleDef ruleDef3 = new RuleDef("RyanTurrets.TurretMode", "TurretModes"); //Adds Choice name, variable and "hidden", (set this to false if you want it to show up), then adds the string to appear on hover. ruleDef3.AddChoice("1", 1, false).tooltipBodyToken = "Makes all turrets default"; ruleDef3.AddChoice("2", 2, false).tooltipBodyToken = "Makes all turrets shoot rebar"; ruleDef3.AddChoice("3", 3, false).tooltipBodyToken = "Makes all turrets machine guns"; ruleDef3.AddChoice("4", 4, false).tooltipBodyToken = "Switches between Rebar and Machine gun turrets"; ruleDef3.MakeNewestChoiceDefault(); //Adds the choices to the catalog addRule.Invoke(null, new object[] { ruleDef3 }); //This has to run once after all the custom rules are entered, in order to reset the game into knowing what rules exist. List <RuleDef> allRuleDefs = (List <RuleDef>)Harmony.AccessTools.Field(Harmony.AccessTools.TypeByName("RuleCatalog"), "allRuleDefs").GetValue(null); List <RuleChoiceDef> allChoicesDefs = (List <RuleChoiceDef>)Harmony.AccessTools.Field(Harmony.AccessTools.TypeByName("RuleCatalog"), "allChoicesDefs").GetValue(null); for (int k = 0; k < allRuleDefs.Count; k++) { RuleDef ruleDef4 = allRuleDefs[k]; ruleDef4.globalIndex = k; for (int j = 0; j < ruleDef4.choices.Count; j++) { RuleChoiceDef ruleChoiceDef6 = ruleDef4.choices[j]; ruleChoiceDef6.localIndex = j; ruleChoiceDef6.globalIndex = allChoicesDefs.Count; ruleChoiceDef6.availableInMultiPlayer = true; ruleChoiceDef6.excludeByDefault = false; allChoicesDefs.Add(ruleChoiceDef6); } } Harmony.AccessTools.Field(Harmony.AccessTools.TypeByName("RuleCatalog"), "allRuleDefs").SetValue(null, allRuleDefs); Harmony.AccessTools.Field(Harmony.AccessTools.TypeByName("RuleCatalog"), "allChoicesDefs").SetValue(null, allChoicesDefs); RuleCatalog.availability.MakeAvailable(); bool didReflect = false; currentRule = (int)Run.instance.ruleBook.GetRuleChoice(RuleCatalog.FindRuleDef("RyanTurrets.TurretMode")).extraData; On.EntityStates.Drone.DroneWeapon.FireMegaTurret.OnEnter += (orig, self) => { if (!didReflect) { Harmony.AccessTools.Field(Harmony.AccessTools.TypeByName("EntityStates.Drone.DroneWeapon.FireMegaTurret"), "force").SetValue(self, 0.1f); didReflect = true; } orig(self); }; bool gotDefault = false; float defaultspeed = 0f; float defaultleveldamage = 0f; float defaultdamage = 0f; On.RoR2.CharacterBody.HandleConstructTurret += (orig, netMsg) => { if (!gotDefault) { defaultspeed = BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseAttackSpeed; defaultdamage = BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseDamage; defaultleveldamage = BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().levelDamage; gotDefault = true; } if (currentRule == 1) { BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Commando.CommandoWeapon.Reload).Assembly.GetType("EntityStates.EngiTurret.EngiTurretWeapon.FireGauss"); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseAttackSpeed = defaultspeed; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseDamage = defaultdamage; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().levelDamage = defaultleveldamage; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseNameToken = "Weak Boi Default"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].maxDistance = 60; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].activationRequiresTargetLoS = true; } } } else if (currentRule == 2) { BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Toolbot.FireSpear); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseAttackSpeed = 0.5f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseDamage = 13f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().levelDamage = 2.12f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseNameToken = "Portable Railgun"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].maxDistance = 1024; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].activationRequiresTargetLoS = false; } } } else if (currentRule == 3) { BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Commando.CommandoWeapon.Reload).Assembly.GetType("EntityStates.Drone.DroneWeapon.FireMegaTurret"); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseAttackSpeed = 1f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseDamage = 2f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().levelDamage = 0.4f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseNameToken = ".50 Cal Maxim"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].maxDistance = 100; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].activationRequiresTargetLoS = false; } } } else { if (lastWasRebar == false) { Chat.SendBroadcastChat(new Chat.SimpleChatMessage { baseToken = "Next Turret will be: [Machine Gun]" }); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Toolbot.FireSpear); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseAttackSpeed = 0.5f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseDamage = 13f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().levelDamage = 2.12f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseNameToken = "Portable Railgun"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].maxDistance = 1024; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].activationRequiresTargetLoS = false; } } lastWasRebar = true; } else { Chat.SendBroadcastChat(new Chat.SimpleChatMessage { baseToken = "Next Turret will be: [Railgun]" }); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <SkillLocator>().primary.activationState.stateType = typeof(EntityStates.Commando.CommandoWeapon.Reload).Assembly.GetType("EntityStates.Drone.DroneWeapon.FireMegaTurret"); BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseAttackSpeed = 1f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseDamage = 2f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().levelDamage = 0.4f; BodyCatalog.FindBodyPrefab("EngiTurretBody").GetComponent <CharacterBody>().baseNameToken = ".50 Cal Maxim"; for (int i = 0; i < MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>().Length; i++) { if (MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].customName == "FireAtEnemy") { MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].maxDistance = 100; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].selectionRequiresTargetLoS = false; MasterCatalog.FindMasterPrefab("EngiTurretMaster").GetComponents <AISkillDriver>()[i].activationRequiresTargetLoS = false; } } lastWasRebar = false; } } orig(netMsg); }; }