public static void SetupDeployableSlots() { deployableSlot_Scanner = DeployableAPI.RegisterDeployableSlot(GetScannerDeployableSameSlotLimit); deployableSlot_Gateway = DeployableAPI.RegisterDeployableSlot(GetGatewayDeployableSameSlotLimit); deployableSlot_Saw = DeployableAPI.RegisterDeployableSlot(GetSawDeployableSameSlotLimit); deployableSlot_Blackhole = DeployableAPI.RegisterDeployableSlot(GetBlackholeDeployableSameSlotLimit); }
private bool CanDeploy(EquipmentSlot equipmentSlot, DeployableSlot deployableSlot) { CharacterMaster master = equipmentSlot.characterBody.master; if (!master) { return(false); } if (master.GetDeployableCount(deployableSlot) >= master.GetDeployableSameSlotLimit(deployableSlot)) { return(false); } return(true); }
//Method to give turrets the starting bonus of its owner private void CharacterMaster_AddDeployable(On.RoR2.CharacterMaster.orig_AddDeployable orig, CharacterMaster self, Deployable deployable, DeployableSlot slot) { orig(self, deployable, slot); if (TurretReceivesBonusFromEngineer.Value && slot == DeployableSlot.EngiTurret) { var ownerMasterBonus = deployable.ownerMaster.inventory.infusionBonus; if (ownerMasterBonus > 0) { var turretMaster = deployable.GetComponent <CharacterMaster>(); turretMaster.inventory.AddInfusionBonus(ownerMasterBonus); } } }
public void AddDeployable(Deployable deployable, DeployableSlot slot) { if (!NetworkServer.active) { Debug.LogWarning("[Server] function 'System.Void RoR2.CharacterMaster::AddDeployable(RoR2.Deployable,RoR2.DeployableSlot)' called on client"); return; } if (deployable.ownerMaster) { Debug.LogErrorFormat("Attempted to add deployable {0} which already belongs to master {1} to master {2}.", new object[] { deployable.gameObject, deployable.ownerMaster.gameObject, base.gameObject }); } if (this.deployablesList == null) { this.deployablesList = new List <DeployableInfo>(); } int num = 0; int deployableSameSlotLimit = this.GetDeployableSameSlotLimit(slot); for (int i = this.deployablesList.Count - 1; i >= 0; i--) { if (this.deployablesList[i].slot == slot) { num++; if (num >= deployableSameSlotLimit) { Deployable deployable2 = this.deployablesList[i].deployable; this.deployablesList.RemoveAt(i); deployable2.ownerMaster = null; deployable2.onUndeploy.Invoke(); } } } this.deployablesList.Add(new DeployableInfo { deployable = deployable, slot = slot }); deployable.ownerMaster = this; }
// Token: 0x06000831 RID: 2097 RVA: 0x000233CC File Offset: 0x000215CC public int GetDeployableSameSlotLimit(DeployableSlot slot) { int result = 0; switch (slot) { case DeployableSlot.EngiMine: result = 4; if (this.bodyInstanceObject) { result = this.bodyInstanceObject.GetComponent <SkillLocator>().secondary.maxStock; } break; case DeployableSlot.EngiTurret: result = 2; break; case DeployableSlot.BeetleGuardAlly: result = this.inventory.GetItemCount(ItemIndex.BeetleGland); break; case DeployableSlot.EngiBubbleShield: result = 1; break; case DeployableSlot.LoaderPylon: result = 3; break; case DeployableSlot.EngiSpiderMine: result = 4; if (this.bodyInstanceObject) { result = this.bodyInstanceObject.GetComponent <SkillLocator>().secondary.maxStock; } break; case DeployableSlot.RoboBallMini: result = 3; break; } return(result); }
public int GetDeployableCount(DeployableSlot slot) { if (!NetworkServer.active) { Debug.LogWarning("[Server] function 'System.Int32 RoR2.CharacterMaster::GetDeployableCount(RoR2.DeployableSlot)' called on client"); return(0); } if (this.deployablesList == null) { return(0); } int num = 0; for (int i = this.deployablesList.Count - 1; i >= 0; i--) { if (this.deployablesList[i].slot == slot) { num++; } } return(num); }
private void CharacterMaster_AddDeployable(On.RoR2.CharacterMaster.orig_AddDeployable orig, CharacterMaster self, Deployable deployable, DeployableSlot slot) { orig(self, deployable, slot); var turretinventory = self.gameObject.GetComponent<turretinventory>(); if(turretinventory == null) { turretinventory = self.gameObject.AddComponent<turretinventory>(); } turretinventory.deployables = DeployList(self); turretinventory.characterMaster = self; }
public void AddDeployable(Deployable deployable, DeployableSlot slot) { if (!NetworkServer.active) { Debug.LogWarning("[Server] function 'System.Void RoR2.CharacterMaster::AddDeployable(RoR2.Deployable,RoR2.DeployableSlot)' called on client"); return; } if (deployable.ownerMaster) { Debug.LogErrorFormat("Attempted to add deployable {0} which already belongs to master {1} to master {2}.", new object[] { deployable.gameObject, deployable.ownerMaster.gameObject, base.gameObject }); } if (this.deployablesList == null) { this.deployablesList = new List <DeployableInfo>(); } int num = 0; int num2 = 0; switch (slot) { case DeployableSlot.EngiMine: num2 = 10; break; case DeployableSlot.EngiTurret: num2 = 2; break; case DeployableSlot.BeetleGuardAlly: num2 = this.inventory.GetItemCount(ItemIndex.BeetleGland); break; case DeployableSlot.EngiBubbleShield: num2 = 1; break; } for (int i = this.deployablesList.Count - 1; i >= 0; i--) { if (this.deployablesList[i].slot == slot) { num++; if (num >= num2) { Deployable deployable2 = this.deployablesList[i].deployable; this.deployablesList.RemoveAt(i); deployable2.ownerMaster = null; deployable2.onUndeploy.Invoke(); } } } this.deployablesList.Add(new DeployableInfo { deployable = deployable, slot = slot }); deployable.ownerMaster = this; }
private int On_CMGetDeployableSameSlotLimit(On.RoR2.CharacterMaster.orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot) { var retv = orig(self, slot); if (slot != DeployableSlot.EngiTurret) { return(retv); } var sp = self.GetBody()?.skillLocator?.special; if (!sp) { return(retv); } if (sp.skillDef == skills.First(x => x is EngiTurret2).myDef) { return(retv + 1); } if (sp.skillDef == skills.First(x => x is EngiWalker2).myDef) { return(retv + 2); } return(retv); }
private int CharacterMaster_GetDeployableSameSlotLimit(On.RoR2.CharacterMaster.orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot) { var result = orig(self, slot); if (slot == DeployableSlot.EngiTurret && increaseEngiTurretLimit) { var itemCount = self.inventory.GetItemCount(itemDef); if (itemCount > 0) { result += charges + chargesPerStack * (itemCount - 1); } } return(result); }
private void TurretEliteInheritance(On.RoR2.CharacterMaster.orig_AddDeployable orig, CharacterMaster self, Deployable deployable, DeployableSlot slot) { orig(self, deployable, slot); if (deployable.gameObject.GetComponentInChildren <CharacterMaster>()) { deployable.gameObject.GetComponentInChildren <CharacterMaster>().inventory.CopyEquipmentFrom(self.inventory); deployable.gameObject.GetComponentInChildren <CharacterMaster>().inventory.ResetItem(ItemIndex.AutoCastEquipment); deployable.gameObject.GetComponentInChildren <CharacterMaster>().inventory.ResetItem(ItemIndex.TonicAffliction); } else if (deployable.gameObject.GetComponentInParent <CharacterMaster>()) { deployable.gameObject.GetComponentInParent <CharacterMaster>().inventory.CopyEquipmentFrom(self.inventory); deployable.gameObject.GetComponentInParent <CharacterMaster>().inventory.ResetItem(ItemIndex.AutoCastEquipment); deployable.gameObject.GetComponentInParent <CharacterMaster>().inventory.ResetItem(ItemIndex.TonicAffliction); } }
private void On_CMAddDeployable(On.RoR2.CharacterMaster.orig_AddDeployable orig, CharacterMaster self, Deployable dpl, DeployableSlot dpls) { orig(self, dpl, dpls); if (inclDeploys && NetworkServer.active && self.TryGetComponent <LifeSavingsComponent>(out var cpt)) { cpt.ServerUpdateIcnt(); } }
public override void SetupAttributes() { base.SetupAttributes(); //load custom assets skillDef = TinkersSatchelPlugin.resources.LoadAsset <SkillDef>("Assets/TinkersSatchel/SkillDefs/EngiUtilitySpeedispenser.asset"); var tmpDeployableBody = TinkersSatchelPlugin.resources.LoadAsset <GameObject>("Assets/TinkersSatchel/Prefabs/Characters/EngiSpeedispenser/EngiSpeedispenserBody.prefab") .InstantiateClone("TkSatTempSetupPrefab", false); deployableMaster = TinkersSatchelPlugin.resources.LoadAsset <GameObject>("Assets/TinkersSatchel/Prefabs/Characters/EngiSpeedispenser/EngiSpeedispenserMaster.prefab"); deployableBlueprint = TinkersSatchelPlugin.resources.LoadAsset <GameObject>("Assets/TinkersSatchel/Prefabs/Characters/EngiSpeedispenser/EngiSpeedispenserBlueprints.prefab"); //load vanilla assets targetSkillFamily = Addressables.LoadAssetAsync <SkillFamily>("RoR2/Base/Engi/EngiBodyUtilityFamily.asset") .WaitForCompletion(); var captainSupply = Addressables.LoadAssetAsync <GameObject>("RoR2/Base/Captain/CaptainSupplyDrop, EquipmentRestock.prefab") .WaitForCompletion() .InstantiateClone("TkSatTempSetupPrefab2", false); var buffIcon = Addressables.LoadAssetAsync <Sprite>("RoR2/DLC1/AttackSpeedAndMoveSpeed/texCoffeeIcon.png") .WaitForCompletion(); var mainMtl = Addressables.LoadAssetAsync <Material>("RoR2/Base/Engi/matEngiTurret.mat") .WaitForCompletion(); var bpOkMtl = Addressables.LoadAssetAsync <Material>("RoR2/Base/Engi/matBlueprintsOk.mat") .WaitForCompletion(); var bpNokMtl = Addressables.LoadAssetAsync <Material>("RoR2/Base/Engi/matBlueprintsInvalid.mat") .WaitForCompletion(); var ctp = Addressables.LoadAssetAsync <CharacterCameraParams>("RoR2/Base/Common/ccpStandard.asset") .WaitForCompletion(); var turretBp = Addressables.LoadAssetAsync <GameObject>("RoR2/Base/Engi/EngiTurretBlueprints.prefab") .WaitForCompletion(); var turretObj = Addressables.LoadAssetAsync <GameObject>("RoR2/Base/Engi/EngiTurretBody.prefab") .WaitForCompletion(); var bpProjMtl = turretBp.transform.Find("BlobLightProjector").GetComponent <Projector>().material; //modify speedBuff = ScriptableObject.CreateInstance <BuffDef>(); speedBuff.buffColor = Color.white; speedBuff.canStack = false; speedBuff.isDebuff = false; speedBuff.name = "TKSATEngiSpeedispenserBuff"; speedBuff.iconSprite = buffIcon; tmpDeployableBody.GetComponent <CameraTargetParams>().cameraParams = ctp; tmpDeployableBody.GetComponent <ModelLocator>().modelTransform.GetComponent <MeshRenderer>().material = mainMtl; var eic = captainSupply.transform.Find("ModelBase/captain supply drop/EnergyIndicatorContainer"); eic.SetParent(tmpDeployableBody.transform); eic.localScale *= 0.5f; eic.position -= new Vector3(0f, 1.5f, 0f); var cl = tmpDeployableBody.GetComponent <ModelLocator>().modelTransform.GetComponent <ChildLocator>(); cl.transformPairs[0].transform = eic; cl.transformPairs[1].transform = eic.Find("Canvas/EnergyIndicatorBackgroundPanel/EnergyIndicator"); GameObject.Destroy(captainSupply); deployableBody = tmpDeployableBody.InstantiateClone("EngiSpeedispenserBody", true); GameObject.Destroy(tmpDeployableBody); deployableMaster.GetComponent <CharacterMaster>().bodyPrefab = deployableBody; deployableBlueprint.transform.Find("BlobLight").GetComponent <Projector>().material = bpProjMtl; deployableBlueprint.transform.Find("Model Base/SpeedispenserModel").GetComponent <MeshRenderer>().material = bpOkMtl; var bp = deployableBlueprint.GetComponent <BlueprintController>(); bp.okMaterial = bpOkMtl; bp.invalidMaterial = bpNokMtl; foreach (var akEvent in turretBp.GetComponents <AkEvent>()) { var newEvent = deployableBlueprint.AddComponent <AkEvent>(); newEvent.triggerList = akEvent.triggerList.ToArray().ToList(); newEvent.useOtherObject = akEvent.useOtherObject; newEvent.actionOnEventType = akEvent.actionOnEventType; newEvent.curveInterpolation = akEvent.curveInterpolation; newEvent.enableActionOnEvent = akEvent.enableActionOnEvent; newEvent.data = akEvent.data; newEvent.useCallbacks = akEvent.useCallbacks; newEvent.Callbacks = akEvent.Callbacks.ToArray().ToList(); newEvent.playingId = akEvent.playingId; newEvent.soundEmitterObject = deployableBlueprint; newEvent.transitionDuration = akEvent.transitionDuration; } foreach (var akEvent in turretObj.GetComponents <AkEvent>()) { var newEvent = deployableBody.AddComponent <AkEvent>(); newEvent.triggerList = akEvent.triggerList.ToArray().ToList(); newEvent.useOtherObject = akEvent.useOtherObject; newEvent.actionOnEventType = akEvent.actionOnEventType; newEvent.curveInterpolation = akEvent.curveInterpolation; newEvent.enableActionOnEvent = akEvent.enableActionOnEvent; newEvent.data = akEvent.data; newEvent.useCallbacks = akEvent.useCallbacks; newEvent.Callbacks = akEvent.Callbacks.ToArray().ToList(); newEvent.playingId = akEvent.playingId; newEvent.soundEmitterObject = deployableBody; newEvent.transitionDuration = akEvent.transitionDuration; } //R2API catalog reg var dmsSerializable = ContentAddition.AddEntityState <DispenserMainState>(out bool entStateDidSucceed); if (!entStateDidSucceed) { TinkersSatchelPlugin._logger.LogError("EntityState setup failed on EngiUtilitySpeedispenser (DispenserMainState)! Deployable will be unusable."); } else { var esm = deployableBody.GetComponent <EntityStateMachine>(); esm.initialStateType = dmsSerializable; esm.mainStateType = dmsSerializable; } R2API.Networking.NetworkingAPI.RegisterMessageType <PlaceDispenser.MsgConstructDispenser>(); ContentAddition.AddBuffDef(speedBuff); ContentAddition.AddBody(deployableBody); ContentAddition.AddMaster(deployableMaster); deployableSlot = DeployableAPI.RegisterDeployableSlot((master, countMult) => { return(1); }); skillDef.activationState = ContentAddition.AddEntityState <PlaceDispenser>(out entStateDidSucceed); if (!entStateDidSucceed) { TinkersSatchelPlugin._logger.LogError("EntityState setup failed on EngiUtilitySpeedispenser! Skill will not appear nor function."); } else if (!ContentAddition.AddSkillDef(skillDef)) { TinkersSatchelPlugin._logger.LogError("SkillDef setup failed on EngiUtilitySpeedispenser! Skill will not appear nor function."); } else { setupSucceeded = true; } }
static DecoyModule() { deployableSlot = DeployablesCore.AddDeployableSlot(new DeployableSlotDef(1)); }
private void CharacterMaster_AddDeployable(On.RoR2.CharacterMaster.orig_AddDeployable orig, CharacterMaster self, Deployable deployable, DeployableSlot slot) { string turretType; if (RoR2Application.isInSinglePlayer) { turretType = currentRule.ToString(); } else { turretType = Facepunch.Steamworks.Client.Instance.Lobby.GetMemberData(self.GetComponent<PlayerCharacterMasterController>().netId.Value, "Turret"); } if(turretType == "RailGun" || turretType == "2") { SetToRail(); } else if(turretType == "MiniGun" || turretType == "3") { SetToMinigun(); } else { SetToDefault(); } orig(self, deployable, slot); var turretinventory = self.gameObject.GetComponent<turretinventory>(); if (turretinventory == null) { turretinventory = self.gameObject.AddComponent<turretinventory>(); } turretinventory.deployables = DeployList(self); turretinventory.characterMaster = self; }
//AddDeployable fires after OnInventoryChanged while creating a turret, so Deployable.ownerMaster won't be set in OIC private void On_CMAddDeployable(On.RoR2.CharacterMaster.orig_AddDeployable orig, CharacterMaster self, Deployable depl, DeployableSlot slot) { orig(self, depl, slot); var body = depl.GetComponent <CharacterMaster>()?.GetBody(); if (body) { UpdateBarbedWard(body); } }
private void On_CMAddDeployable(On.RoR2.CharacterMaster.orig_AddDeployable orig, CharacterMaster self, Deployable dpl, DeployableSlot dpls) { orig(self, dpl, dpls); if (inclDeploys && self.hasBody) { self.GetBody().GetComponent <LifeSavingsComponent>()?.ServerUpdateIcnt(); } }