public void Awake() { characterBody = gameObject.GetComponent <CharacterBody>(); bodyIndex = characterBody.bodyIndex; currentGenes = new Dictionary <GeneStat, float>(); GeneEngineDriver.livingGenes.Add(this); }
public override void SetupLate() { base.SetupLate(); BodyIndexLunarGolem = BodyCatalog.FindBodyIndex("LUNARGOLEM"); BodyIndexLunarWisp = BodyCatalog.FindBodyIndex("LUNARWISP"); BodyIndexLunarExploder = BodyCatalog.FindBodyIndex("EXPLODER"); }
private static void SetRandomSkin(CharacterMaster master, GameObject bodyPrefab) { BodyIndex bodyIndex = bodyPrefab.GetComponent <CharacterBody>().bodyIndex; SkinDef[] skins = BodyCatalog.GetBodySkins(bodyIndex); master.loadout.bodyLoadoutManager.SetSkinIndex(bodyIndex, (uint)UnityEngine.Random.Range(0, skins.Length)); }
public float ModifyDamage(float damage, BodyIndex sourceBodyIndex) { var count = BismuthFlask.instance.GetCount(body); if (count <= 0 || sourceBodyIndex == BodyIndex.None) { lastHitBodyIndex = BodyIndex.None; return(damage); } if (lastHitBodyIndex != BodyIndex.None) { if (lastHitBodyIndex == sourceBodyIndex) { damage /= 1f + BismuthFlask.instance.resistAmount * count; } else { damage *= 1f + BismuthFlask.instance.weakAmount * count; } } lastHitBodyIndex = sourceBodyIndex; stopwatch = BismuthFlask.instance.duration; body.AddTimedBuff(BismuthFlask.instance.bismuthFlaskBuff, stopwatch); return(damage); }
public override void OnInstall() { base.OnInstall(); GenericGameEvents.OnTakeDamage += OnTakeDamage; projectileIndex = ProjectileCatalog.FindProjectileIndex("Sawmerang"); bodyIndex = BodyCatalog.FindBodyIndex("EquipmentDroneBody"); }
void FixedUpdate() { if (stopwatch > 0f) { stopwatch -= Time.fixedDeltaTime; } else { lastHitBodyIndex = BodyIndex.None; } }
/// <summary> /// Internal method which performs the logic to spawn the given /// player as the given character /// as the given character /// </summary> /// <param name="player">Network user to spawn</param> /// <param name="newBodyPrefab">New body prefab to spawn the player as</param> private static JoinAsResult SpawnPlayerWithBody(NetworkUser player, BodyIndex newBodyIndex) { if (player.master == null) // master is null for newly joining players { Logger.LogMessage($"Spawning new player {player.userName} with bodyIndex = {newBodyIndex}"); return(SpawnNewPlayerWithBody(player, newBodyIndex)); } else // reconnecting players or players trying to change character { Logger.LogMessage($"Respawning existing player {player.userName} with bodyIndex = {newBodyIndex}"); return(RespawnExistingPlayerWithBody(player, newBodyIndex)); } }
void OnLoad() { BodyIndex bodyIndex = BodyCatalog.FindBodyIndex(Settings.PlayableCharactersList[Slot]); if (bodyIndex != BodyIndex.None) { CharacterDropdown.value = DropDownMap[bodyIndex]; } else { SetCharacter(0); Debug.LogWarning($"Warning! Custom character load could not find index for body of \"{Settings.PlayableCharactersList[Slot]}\", using default @RoR2PVP"); } }
private void BrotherSpeechDriver_DoInitialSightResponse(On.RoR2.CharacterSpeech.BrotherSpeechDriver.orig_DoInitialSightResponse orig, RoR2.CharacterSpeech.BrotherSpeechDriver self) { bool isThereAPaladin = false; ReadOnlyCollection <CharacterBody> characterBodies = CharacterBody.readOnlyInstancesList; for (int i = 0; i < characterBodies.Count; i++) { BodyIndex bodyIndex = characterBodies[i].bodyIndex; isThereAPaladin |= (bodyIndex == BodyCatalog.FindBodyIndex(Modules.Prefabs.paladinPrefab)); } if (isThereAPaladin) { RoR2.CharacterSpeech.CharacterSpeechController.SpeechInfo[] responsePool = new RoR2.CharacterSpeech.CharacterSpeechController.SpeechInfo[] { new RoR2.CharacterSpeech.CharacterSpeechController.SpeechInfo { duration = 1f, maxWait = 4f, mustPlay = true, priority = 0f, token = "BROTHER_SEE_PALADIN_1" }, new RoR2.CharacterSpeech.CharacterSpeechController.SpeechInfo { duration = 1f, maxWait = 4f, mustPlay = true, priority = 0f, token = "BROTHER_SEE_PALADIN_2" }, new RoR2.CharacterSpeech.CharacterSpeechController.SpeechInfo { duration = 1f, maxWait = 4f, mustPlay = true, priority = 0f, token = "BROTHER_SEE_PALADIN_3" } }; self.SendReponseFromPool(responsePool); } orig(self); }
public override void SetupLate() { base.SetupLate(); BodyIndexLunarGolem = BodyCatalog.FindBodyIndex("LUNARGOLEM"); BodyIndexLunarWisp = BodyCatalog.FindBodyIndex("LUNARWISP"); BodyIndexLunarExploder = BodyCatalog.FindBodyIndex("EXPLODER"); var listOfMasterRounds = new List <ItemDef>() { MasterRoundI.instance.itemDef, MasterRoundII.instance.itemDef, MasterRoundIII.instance.itemDef, MasterRoundIV.instance.itemDef, MasterRoundV.instance.itemDef, }; MasterRoundDefs = listOfMasterRounds.ToArray(); }
public int CompareTo(BodyAnchor other) { if (ReferenceEquals(this, other)) { return(0); } if (ReferenceEquals(null, other)) { return(1); } var bodyIndexComparison = BodyIndex.CompareTo(other.BodyIndex); if (bodyIndexComparison != 0) { return(bodyIndexComparison); } return(VertexIndex.CompareTo(other.VertexIndex)); }
private static JoinAsResult SpawnNewPlayerWithBody(NetworkUser player, BodyIndex newBodyIndex) { player.CmdSetBodyPreference(newBodyIndex); Run.instance.SetFieldValue("allowNewParticipants", true); Run.instance.OnUserAdded(player); Run.instance.SetFieldValue("allowNewParticipants", false); Transform spawnTransform = GetSpawnTransformForPlayer(player); player.master.SpawnBody(spawnTransform.position, spawnTransform.rotation); HandleBodyItems(player, null, BodyCatalog.GetBodyPrefab(newBodyIndex)); if (DropInConfig.GiveCatchUpItems.Value) { GiveCatchUpItems(player); } return(JoinAsResult.Success); }
private static void ApplyRandomLoadout(CharacterBody characterBody) { BodyIndex bodyIndex = characterBody.bodyIndex; Loadout loadout = new Loadout(); var skillSlotCount = Loadout.BodyLoadoutManager.GetSkillSlotCountForBody(bodyIndex); for (int skillSlotIndex = 0; skillSlotIndex < skillSlotCount; skillSlotIndex++) { var skillVariantCount = GetSkillVariantCount(bodyIndex, skillSlotIndex); var skillVariantIndex = Random.Range(0, skillVariantCount); loadout.bodyLoadoutManager.SetSkillVariant(bodyIndex, skillSlotIndex, (uint)skillVariantIndex); } if (characterBody.master) { characterBody.master.SetLoadoutServer(loadout); } if (characterBody) { characterBody.SetLoadoutServer(loadout); } }
private static string JoinAs(NetworkUser sender, string[] args) { if (args.Length != 1 && args.Length != 2) { return("join as requires either 1 or 2 arguments"); } NetworkUser player = args.Length == 1 ? sender : GetNetUserFromString(args[1]); if (player == null) { return("Unable to find player with given name"); } string survivorOrBodyName = args[0]; string displayName; SurvivorDef survivor = GetAvailibleSurvivorForPlayerByName(player, survivorOrBodyName); BodyIndex spawnAsBodyIndex = BodyIndex.None; if (survivor != null) { spawnAsBodyIndex = BodyCatalog.FindBodyIndex(survivor.bodyPrefab); displayName = Language.GetString(survivor.displayNameToken); } else if (DropInConfig.AllowJoinAsAllBodies.Value) { BodyIndex bodyIndex = BodyCatalog.FindBodyIndexCaseInsensitive(survivorOrBodyName.EndsWith("Body", StringComparison.InvariantCultureIgnoreCase) ? survivorOrBodyName : survivorOrBodyName + "Body"); if (bodyIndex == BodyIndex.None) { return("Unable to find survivor or body with given name"); } spawnAsBodyIndex = bodyIndex; displayName = BodyCatalog.GetBodyName(bodyIndex); } else { return("Unable to find survivor with the given name"); } JoinAsResult joinAsResult; try { joinAsResult = SpawnPlayerWithBody(player, spawnAsBodyIndex); } catch (Exception ex) { Debug.LogException(ex); Logger.LogError(ex); return($"An exception occured spawning {player.userName} as {displayName}"); } switch (joinAsResult) { case JoinAsResult.Success: return($"Spawning {player.userName} as {displayName}"); case JoinAsResult.DeadAndNotAllowRespawn: return($"{player.userName} will be spawned as {displayName} next stage"); default: return("Unknown join as result"); } }
private static JoinAsResult RespawnExistingPlayerWithBody(NetworkUser player, BodyIndex newBodyIndex) { GameObject oldBodyPrefab = player.master.bodyPrefab; player.CmdSetBodyPreference(newBodyIndex); JoinAsResult result = JoinAsResult.Success; if (player.GetCurrentBody() == null && player.master.lostBodyToDeath && !DropInConfig.AllowRespawn.Value) { Logger.LogMessage($"Unable immediately to spawn {player.userName} with bodyIndex = {newBodyIndex} due to being player being dead and AllowRespawn being set to false"); result = JoinAsResult.DeadAndNotAllowRespawn; } else { Transform spawnTransform = GetSpawnTransformForPlayer(player); player.master.Respawn(spawnTransform.position, spawnTransform.rotation); } HandleBodyItems(player, oldBodyPrefab, BodyCatalog.GetBodyPrefab(newBodyIndex)); return(result); }
private static int GetSkillVariantCount(BodyIndex bodyIndex, int skillSlot) { return(Loadout.BodyLoadoutManager.allBodyInfos[(int)bodyIndex].prefabSkillSlots[skillSlot].skillFamily.variants.Length); }
private static void MasterCatalog_Init() { BodyIndexLunarGolem = BodyCatalog.FindBodyIndex("LUNARGOLEM"); BodyIndexLunarWisp = BodyCatalog.FindBodyIndex("LUNARWISP"); BodyIndexLunarExploder = BodyCatalog.FindBodyIndex("EXPLODER"); }
private static void CacheBodyCata() { banditBodyIndex = BodyCatalog.FindBodyIndex("Bandit2Body"); Debug.LogError($"{BodyCatalog.FindBodyIndex("Bandit2Body")} {(int)BodyCatalog.FindBodyIndex("Bandit2Body")}"); }
internal static void LoadoutPanelControllerRowCtor(On.RoR2.UI.LoadoutPanelController.Row.orig_ctor orig, object selfObject, RoR2.UI.LoadoutPanelController owner, BodyIndex bodyIndex, string titleToken) { var self = selfObject as RoR2.UI.LoadoutPanelController.Row; orig(self, owner, bodyIndex, titleToken); //Disabling sorting override because it not work with mask var highlightRect = self.choiceHighlightRect; highlightRect.GetComponent <RefreshCanvasDrawOrder>().enabled = false; highlightRect.GetComponent <Canvas>().overrideSorting = false; var buttonContainer = self.buttonContainerTransform; var rowPanel = self.rowPanelTransform; var rowHorizontalLayout = rowPanel.gameObject.AddComponent <HorizontalLayoutGroup>(); var panel = rowPanel.Find("Panel"); var slotLabel = rowPanel.Find("SlotLabel"); var labelContainer = new GameObject("LabelContainer"); labelContainer.transform.SetParent(rowPanel, false); panel.SetParent(labelContainer.transform, false); slotLabel.SetParent(labelContainer.transform, false); var slotLabelRect = slotLabel.GetComponent <RectTransform>(); slotLabelRect.anchoredPosition = new Vector2(0, 0); var labelContainerLayout = labelContainer.AddComponent <LayoutElement>(); labelContainerLayout.minHeight = 0; labelContainerLayout.preferredHeight = 96; labelContainerLayout.minWidth = 128; var labelContainerRect = labelContainer.GetComponent <RectTransform>(); labelContainerRect.anchorMin = new Vector2(0, 0); labelContainerRect.anchorMax = new Vector2(1, 1); labelContainerRect.pivot = new Vector2(0, 0F); var scrollPanel = new GameObject("RowScrollPanel"); scrollPanel.transform.SetParent(rowPanel, false); var scrollViewport = new GameObject("Viewport"); scrollViewport.transform.SetParent(scrollPanel.transform, false); var scrollViewportRectTransform = scrollViewport.AddComponent <RectTransform>(); scrollViewportRectTransform.pivot = new Vector2(0.5F, 0.5F); scrollViewportRectTransform.anchorMin = new Vector2(0, 0); scrollViewportRectTransform.anchorMax = new Vector2(1, 1); scrollViewportRectTransform.sizeDelta = new Vector2(0, 0); buttonContainer.SetParent(scrollViewport.transform, false); highlightRect.SetParent(scrollViewport.transform, false); var mask = scrollPanel.AddComponent <RectMask2D>(); var scrollPanelLayout = scrollPanel.AddComponent <LayoutElement>(); scrollPanelLayout.preferredWidth = 100000; var scrollRect = scrollPanel.AddComponent <ConstrainedScrollRect>(); scrollRect.horizontal = true; scrollRect.vertical = false; scrollRect.viewport = scrollViewportRectTransform; scrollRect.content = buttonContainer; scrollRect.scrollSensitivity = -30; scrollRect.movementType = ScrollRect.MovementType.Clamped; scrollRect.scrollConstraint = ConstrainedScrollRect.Constraint.OnlyDrag; scrollRect.redirectConstrained = rowPanel.GetComponentInParent <ConstrainedScrollRect>(); var scrollPanelRectTransform = scrollPanel.GetComponent <RectTransform>(); scrollPanelRectTransform.pivot = new Vector2(1, 0.5F); scrollPanelRectTransform.anchorMin = new Vector2(0, 0); scrollPanelRectTransform.anchorMax = new Vector2(1, 1); //Adding ContentSizeFilter, otherwise childs would have been wrong size var buttonContainerSizeFilter = buttonContainer.gameObject.AddComponent <ContentSizeFitter>(); buttonContainerSizeFilter.horizontalFit = ContentSizeFitter.FitMode.PreferredSize; buttonContainerSizeFilter.verticalFit = ContentSizeFitter.FitMode.Unconstrained; buttonContainer.pivot = new Vector2(0, 0.5F); buttonContainer.Find("Spacer").gameObject.SetActive(false); var buttonContainerHorizontalLayout = buttonContainer.GetComponent <HorizontalLayoutGroup>(); buttonContainerHorizontalLayout.padding = new RectOffset(8, 8, 8, 8); var rightButton = SetupButton("Right", scrollPanelRectTransform, MoveDirection.Right, 1); var leftButton = SetupButton("Left", scrollPanelRectTransform, MoveDirection.Left, 0); var scrollButtonsController = scrollPanel.AddComponent <ScrollButtonsController>(); scrollButtonsController.left = leftButton; scrollButtonsController.right = rightButton; GameObject SetupButton(string buttonPrefix, Transform parent, MoveDirection moveDirection, float xNormalized) { var scrollButton = GameObject.Instantiate(Resources.Load <GameObject>($"prefabs/ui/controls/buttons/{buttonPrefix}Button"), parent, false); scrollButton.name = $"{buttonPrefix}ScrollButton"; scrollButton.layer = 5; var hgButton = scrollButton.GetComponent <RoR2.UI.HGButton>(); var arrowObject = new GameObject("Arrow"); arrowObject.transform.SetParent(scrollButton.transform, false); var arrowObjectRectTransform = arrowObject.AddComponent <RectTransform>(); arrowObjectRectTransform.pivot = new Vector2(0.5F, 0.5F); arrowObjectRectTransform.anchorMin = new Vector2(0, 0); arrowObjectRectTransform.anchorMax = new Vector2(1, 1); arrowObjectRectTransform.sizeDelta = new Vector2(-8, 0); var targetGraphic = hgButton.targetGraphic as Image; var arrowImage = arrowObject.AddComponent <Image>(); arrowImage.sprite = targetGraphic.sprite; GameObject.DestroyImmediate(hgButton.targetGraphic); var translucentImage = scrollButton.AddComponent <TranslucentImage>(); translucentImage.material = defaultTranslucentMaterial; translucentImage.color = Color.black; hgButton.targetGraphic = arrowImage; var scrollOnPress = scrollButton.AddComponent <ContinuousScrollOnPress>(); scrollOnPress.scrollRect = scrollRect; scrollOnPress.sensitivity = -400; scrollOnPress.moveDirection = moveDirection; GameObject.DestroyImmediate(scrollButton.GetComponent <LayoutElement>()); var rectTransform = scrollButton.GetComponent <RectTransform>(); rectTransform.anchorMin = new Vector2(xNormalized, 0F); rectTransform.anchorMax = new Vector2(xNormalized, 1F); rectTransform.pivot = new Vector2(xNormalized, 0.5F); rectTransform.sizeDelta = new Vector2(24, 0); scrollButton.SetActive(false); return(scrollButton); } }
public override void OnInstall() { base.OnInstall(); GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal; requiredBodyIndex = BodyCatalog.FindBodyIndex("BrotherHurtBody"); }
private void BodyCatalog_Init(On.RoR2.BodyCatalog.orig_Init orig) { orig(); _crocoBod = BodyCatalog.FindBodyIndex("CrocoBody"); }