private void SpawnStanMinion(GameObject gameoObject, string masterName, Vector3 position) { CharacterBody characterBody = gameObject.GetComponent <CharacterBody>(); if (NetworkServer.active) { CharacterMaster characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab(masterName), position = position, rotation = characterBody.transform.rotation, summonerBodyObject = gameObject, ignoreTeamMemberLimit = true, teamIndexOverride = new TeamIndex?(TeamIndex.Player) }.Perform(); characterMaster.inventory.GiveItem(RoR2Content.Items.HealthDecay.itemIndex, 35); this.PlaySound(Assets.StrongStanSpawnSound, characterMaster.GetBodyObject()); } else { NetworkIdentity networkIdentity = base.gameObject.GetComponent <NetworkIdentity>(); if (networkIdentity) { new NetMessages.SpawnStanMinonMessage(networkIdentity.netId, masterName, position, true, Assets.StrongStanSpawnSound) .Send(NetworkDestination.Server); } } }
private void CharacterMaster_TransformBody(On.RoR2.CharacterMaster.orig_TransformBody orig, RoR2.CharacterMaster self, string bodyName) { var baseAI = self.GetComponent <BaseAI>(); if (baseAI) { //Chat.AddMessage($"baseAI found"); var masterPrefab = MasterCatalog.FindMasterPrefab(bodyName); if (masterPrefab) { //Chat.AddMessage($"1"); ReplaceSkillDrivers(self, baseAI, masterPrefab); } if (!masterPrefab) { var bodyPrefab = BodyCatalog.FindBodyPrefab(bodyName); if (bodyPrefab) { var masterIndex = MasterCatalog.FindAiMasterIndexForBody(bodyPrefab.GetComponent <CharacterBody>().bodyIndex); masterPrefab = MasterCatalog.GetMasterPrefab(masterIndex); if (masterPrefab) { //Chat.AddMessage($"2"); ReplaceSkillDrivers(self, baseAI, masterPrefab); } } } } orig(self, bodyName); }
public void OnReceived() { GameObject gameObject = Util.FindNetworkObject(this.targetId); CharacterBody characterBody = gameObject.GetComponent <CharacterBody>(); if (!gameObject) { StanWorshipperPlugin.logger.LogMessage("Error spawning stan fragment on client: target id was not found!"); return; } CharacterMaster characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab(masterName), position = position, rotation = characterBody.transform.rotation, summonerBodyObject = gameObject, ignoreTeamMemberLimit = true, teamIndexOverride = new TeamIndex?(TeamIndex.Player) }.Perform(); characterMaster.inventory.GiveItem(RoR2Content.Items.HealthDecay.itemIndex, 30); if (this.playSound & this.soundName != "") { new NetMessages.SoundMessage(characterMaster.GetBodyObject().GetComponent <NetworkIdentity>().netId, soundName) .Send(NetworkDestination.Clients); } }
private static void PPDoppel(ConCommandArgs args) //borrowed code from debugtoolkit { var beetles = UnityEngine.Object.FindObjectsOfType <UmbraBeetle>(); if (beetles.Length == 0) { GameObject masterPrefab = MasterCatalog.FindMasterPrefab("BeetleMaster"); GameObject bodyPrefab = masterPrefab.GetComponent <CharacterMaster>().bodyPrefab; var bodyGameObject = UnityEngine.Object.Instantiate <GameObject>(masterPrefab, args.sender.master.GetBody().transform.position, Quaternion.identity); var component = bodyGameObject.AddComponent <UmbraBeetle>(); CharacterMaster master = bodyGameObject.GetComponent <CharacterMaster>(); master.inventory.GiveItem(ItemIndex.InvadingDoppelganger); component.characterBody = master.GetBody(); NetworkServer.Spawn(bodyGameObject); master.SpawnBody(bodyPrefab, args.sender.master.GetBody().transform.position, Quaternion.identity); Debug.Log("Spawned umbra beetle"); } else { //UnityEngine.Object.DestroyImmediate(beetles[0].gameObject); beetles[0].Suicide(); Debug.Log("Destroyed umbra beetle"); } }
public override void OnEnter() { base.OnEnter(); float baseMaxDuration = 2f; float autoFireDuration = baseMaxDuration / attackSpeedStat; Ray aimRay = base.GetAimRay(); base.StartAimMode(aimRay, 2f, false); base.PlayAnimation("Gesture, Additive", "FireNovaBomb", "FireShotgun", autoFireDuration * 3f); base.PlayAnimation("Gesture, Override", "FireNovaBomb", "FireShotgun", autoFireDuration * 3f); bool isAuthority = base.isAuthority; if (NetworkServer.active) { CharacterMaster characterMaster = new MasterSummon { masterPrefab = MasterCatalog.FindMasterPrefab("ImpMaster"), position = base.characterBody.transform.position, rotation = base.transform.rotation, summonerBodyObject = base.characterBody.gameObject, ignoreTeamMemberLimit = true, teamIndexOverride = TeamIndex.Player, }.Perform(); characterMaster.GetBody().AddBuff(BuffIndex.AffixRed); characterMaster.GetBody().inventory.GiveRandomItems(base.characterBody.inventory.GetTotalItemCountOfTier(ItemTier.Tier1) + base.characterBody.inventory.GetTotalItemCountOfTier(ItemTier.Tier2) + base.characterBody.inventory.GetTotalItemCountOfTier(ItemTier.Tier3) + base.characterBody.inventory.GetTotalItemCountOfTier(ItemTier.Lunar) + base.characterBody.inventory.GetTotalItemCountOfTier(ItemTier.Boss)); characterMaster.inventory.GiveItem(ItemIndex.HealthDecay, 30); } base.OnExit(); }
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 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); }
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; 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); TeleporterInteraction.instance.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) { TeleporterInteraction.instance.GetFieldValue <BossGroup>("bossGroup").combatSquad.AddMember(enemy); } SavedGames.instance.StartCoroutine(WaitForStart(enemy)); }
public void Start() { if (!itemStealController) { itemStealController = returnStolenItems.itemStealController; } itemStealController.onStealFinishClient += ItemStealController_onStealFinishClient; masterPrefab = MasterCatalog.FindMasterPrefab("EquipmentDroneMaster"); }
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(); }
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) { 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 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; } } }
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); }
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); }
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 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 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; } } }
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); }
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 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); }
private static void CCSpawnAI(ConCommandArgs args) { //- Spawns the specified CharacterMaster. Requires 1 argument: spawn_ai 0:{localised_objectname} 1:[Count:1] 2:[EliteIndex:-1/None] 3:[Braindead:0/false(0|1)] 4:[TeamIndex:0/Neutral] if (args.sender == null) { Log.Message(Lang.DS_NOTYETIMPLEMENTED, LogLevel.Error); return; } if (args.Count == 0) { Log.MessageNetworked(Lang.SPAWNAI_ARGS, args, LogLevel.MessageClientOnly); return; } string character = StringFinder.Instance.GetMasterName(args[0]); if (character == null) { Log.MessageNetworked(Lang.SPAWN_ERROR + character, args, LogLevel.MessageClientOnly); return; } var masterprefab = MasterCatalog.FindMasterPrefab(character); var body = masterprefab.GetComponent <CharacterMaster>().bodyPrefab; int amount = 1; if (args.Count > 1) { if (int.TryParse(args[1], out amount) == false) { Log.MessageNetworked(Lang.SPAWNAI_ARGS, args, LogLevel.MessageClientOnly); return; } } Vector3 location = args.sender.master.GetBody().transform.position; Log.MessageNetworked(string.Format(Lang.SPAWN_ATTEMPT_2, amount, character), args); for (int i = 0; i < amount; i++) { var bodyGameObject = UnityEngine.Object.Instantiate <GameObject>(masterprefab, location, Quaternion.identity); CharacterMaster master = bodyGameObject.GetComponent <CharacterMaster>(); NetworkServer.Spawn(bodyGameObject); master.SpawnBody(body, args.sender.master.GetBody().transform.position, Quaternion.identity); if (args.Count > 2) { var eliteIndex = StringFinder.GetEnumFromPartial <EliteIndex>(args[2]); if (eliteIndex != EliteIndex.None) { 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 > 3 && Util.TryParseBool(args[3], out bool braindead) && braindead) { UnityEngine.Object.Destroy(master.GetComponent <BaseAI>()); } TeamIndex teamIndex = TeamIndex.Monster; if (args.Count > 4) { StringFinder.TryGetEnumFromPartial(args[4], out teamIndex); } if (teamIndex >= TeamIndex.None && teamIndex < TeamIndex.Count) { master.teamIndex = teamIndex; master.GetBody().teamComponent.teamIndex = teamIndex; } } }
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; } } } } }
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); }; }
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 static void CachedMaster() { MageMasterPrefab = MasterCatalog.FindMasterPrefab("MageMonsterMaster"); }