示例#1
0
 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");
 }
示例#3
0
        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);
        }
示例#5
0
                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;
     }
 }
示例#7
0
 /// <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));
     }
 }
示例#8
0
        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");
            }
        }
示例#9
0
        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);
        }
示例#10
0
        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();
        }
示例#11
0
        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));
        }
示例#12
0
        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);
            }
        }
示例#14
0
        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");
            }
        }
示例#15
0
        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);
 }
示例#17
0
 private static void MasterCatalog_Init()
 {
     BodyIndexLunarGolem    = BodyCatalog.FindBodyIndex("LUNARGOLEM");
     BodyIndexLunarWisp     = BodyCatalog.FindBodyIndex("LUNARWISP");
     BodyIndexLunarExploder = BodyCatalog.FindBodyIndex("EXPLODER");
 }
示例#18
0
 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");
 }