void Update() { var localUser = RoR2.LocalUserManager.GetFirstLocalUser(); if (localUser == null || localUser.cachedMasterController == null || localUser.cachedMasterController.master == null) { return; } var master = localUser.cachedMasterController.master; Body = master.GetBody(); Inventory = master.inventory; var huds = typeof(RoR2.UI.HUD).GetField <List <RoR2.UI.HUD> >("instancesList"); foreach (var hud in huds) { var items = hud.itemInventoryDisplay.GetField <List <RoR2.UI.ItemIcon> >("itemIcons"); foreach (var item in items) { var def = RoR2.ItemCatalog.GetItemDef(item.GetField <RoR2.ItemIndex>("itemIndex")); var index = item.GetField <RoR2.ItemIndex>("itemIndex"); var count = item.GetField <Int32>("itemCount"); item.tooltipProvider.overrideBodyText = RoR2.Language.GetString(def.descriptionToken) + GetExtraData(index, count); } } }
private void InitializeStats(RoR2.CharacterBody player) { player.baseAttackSpeed = customCharacter.attackSpeed; player.baseDamage = customCharacter.damage; player.baseCrit = customCharacter.crit; player.baseMoveSpeed = customCharacter.moveSpeed; player.baseJumpPower = customCharacter.jumpPower; player.baseJumpCount = customCharacter.jumpCount; player.baseMaxHealth = customCharacter.maxHealth; player.baseMaxShield = customCharacter.maxShield; }
private void ResetStats(ref RoR2.CharacterBody player) { player.baseAttackSpeed = defaultCharacter.attackSpeed; player.baseDamage = defaultCharacter.damage; player.baseCrit = defaultCharacter.crit; player.baseMoveSpeed = defaultCharacter.moveSpeed; player.baseJumpPower = defaultCharacter.jumpPower; player.baseJumpCount = defaultCharacter.jumpCount; player.baseMaxHealth = defaultCharacter.maxHealth; player.baseMaxShield = defaultCharacter.maxShield; customCharacter = new CharacterStats(player.baseAttackSpeed, player.baseDamage, player.baseCrit, player.baseMoveSpeed, player.baseJumpPower, player.baseMaxHealth, player.baseMaxShield, player.baseJumpCount); RoR2.Chat.AddMessage(user + "s stats have been <color=#48C9B0>reset</color>."); }
private void CharacterBody_Start(CharacterBody.orig_Start orig, RoR2.CharacterBody self) { if (user == self.GetUserName()) { player = self; defaultCharacter = new CharacterStats(self.baseAttackSpeed, self.baseDamage, self.baseCrit, self.baseMoveSpeed, self.baseJumpPower, self.baseMaxHealth, self.baseMaxShield, self.baseJumpCount); if (flag) { customCharacter = new CharacterStats(self.baseAttackSpeed, self.baseDamage, self.baseCrit, self.baseMoveSpeed, self.baseJumpPower, self.baseMaxHealth, self.baseMaxShield, self.baseJumpCount); flag = false; } InitializeStats(self); } orig(self); }
public static Vector3 GetSpawnPositionAroundTeleporter(RoR2.CharacterBody body, float minSpawnRadius, float maxSpawnRadius) { Vector3 positionAroundTP = Vector3.zero; int tries = 0; do { if (tries++ > 1000) { return(Vector3.zero); } positionAroundTP = RoR2.TeleporterInteraction.instance.transform.position; positionAroundTP += GetRandomPositionInCircle(minSpawnRadius, maxSpawnRadius); } while (!TryUpdateToProperPositionOnStage(ref positionAroundTP, body.radius)); return(new Vector3(positionAroundTP.x, positionAroundTP.y + RoR2.Util.GetBodyPrefabFootOffset(body.gameObject), positionAroundTP.z)); }
private static void OnCharacterDeath(GlobalEventManager.orig_OnCharacterDeath orig, RoR2.GlobalEventManager self, RoR2.DamageReport report) { RoR2.CharacterBody victim = report.victimBody; //We need an inventory to do check for our item if (victim.inventory) { //store the amount of our item we have int jetpacks = victim.inventory.GetItemCount(ContentPacks.shinyJetpackDef.itemIndex); if (jetpacks > 0) { if (NetworkServer.active) { float radius = 25; float damageCoefficient = 100; new RoR2.BlastAttack { attacker = victim.gameObject, attackerFiltering = RoR2.AttackerFiltering.Default, teamIndex = victim.teamComponent.teamIndex, bonusForce = new Vector3(0, 50, 0), baseForce = 0.0f, damageColorIndex = RoR2.DamageColorIndex.Default, inflictor = victim.gameObject, losType = RoR2.BlastAttack.LoSType.None, position = victim.transform.position, damageType = RoR2.DamageType.Generic, baseDamage = damageCoefficient * victim.damage * jetpacks, procCoefficient = 1.0f, radius = radius, crit = victim.RollCrit(), falloffModel = RoR2.BlastAttack.FalloffModel.None }.Fire(); GameObject blastEffect1 = Resources.Load <GameObject>("Prefabs/Effects/Impacteffects/ExplosionVFX"); blastEffect1.transform.localScale = new Vector3(radius, radius, radius); } } } orig.Invoke(self, report); }
private static void RecalculateStats(CharacterBody.orig_RecalculateStats orig, RoR2.CharacterBody self) { orig.Invoke(self); if (self) { if (self.inventory) { int count = self.inventory.GetItemCount(ContentPacks.shinyJetpackDef.itemIndex); if (count != 0) { float amount = 2.0f; float moveScale = self.moveSpeed / self.baseMoveSpeed; float jumpScale = self.jumpPower / self.baseJumpPower; bool sprinting = self.isSprinting; if (moveScale > 1) { float extra = moveScale - 1; float sprintExtra = self.sprintingSpeedMultiplier - 1.0f; if (sprinting) { extra -= sprintExtra; } float scaleAmount = 1 + (extra * ((count * amount) + 1)); if (sprinting) { scaleAmount += sprintExtra; } self.GetType().GetProperty("moveSpeed").SetValue(self, (self.moveSpeed / moveScale) * scaleAmount); } if (jumpScale > 1) { float extra = jumpScale - 1; float scaleAmount = 1 + (extra * ((count * amount) + 1)); self.GetType().GetProperty("jumpPower").SetValue(self, (self.jumpPower / jumpScale) * scaleAmount); } } } } }