public void CreateElite() { var eliteDef = new RoR2.EliteDef { name = "Hypercharged", modifierToken = "ARES_HYPERCHARGED", color = Color.white, eliteEquipmentIndex = AffixEquipmentIndex }; EliteIndex = EliteAPI.Add(new CustomElite(eliteDef, 2)); LanguageAPI.Add(eliteDef.modifierToken, eliteDef.name + " {0}"); EliteBuffDef.eliteIndex = EliteIndex; EliteBuffIndex = BuffAPI.Add(new CustomBuff(EliteBuffDef)); AffixEquipmentDef.passiveBuff = EliteBuffIndex; EliteAffixCard = new EliteAffixCard { spawnWeight = 0.5f, costMultiplier = 30.0f, damageBoostCoeff = 2.0f, healthBoostCoeff = 4.5f, eliteOnlyScaling = 0.5f, eliteType = EliteIndex }; EsoLib.Cards.Add(EliteAffixCard); }
public override void SetupAttributes() { base.SetupAttributes(); equipmentDef.canDrop = false; equipmentDef.enigmaCompatible = false; equipmentDef.cooldown = 40; var buffDef = new BuffDef { name = EliteBuffName, buffColor = new Color32(255, 255, 255, byte.MaxValue), iconPath = EliteBuffIconPath, canStack = false, }; buffDef.eliteIndex = EliteIndex; var buffIndex = new CustomBuff(buffDef); EliteBuffIndex = BuffAPI.Add(buffIndex); equipmentDef.passiveBuff = EliteBuffIndex; var eliteDef = new EliteDef { name = ElitePrefixName, modifierToken = EliteModifierString, color = buffDef.buffColor, }; eliteDef.eliteEquipmentIndex = equipmentDef.equipmentIndex; var eliteIndex = new CustomElite(eliteDef, EliteTier); EliteIndex = EliteAPI.Add(eliteIndex); var card = new EliteAffixCard { spawnWeight = 0.5f, costMultiplier = 30.0f, damageBoostCoeff = 2.0f, healthBoostCoeff = 4.5f, eliteOnlyScaling = 0.5f, eliteType = EliteIndex }; EsoLib.Cards.Add(card); EliteCard = card; LanguageAPI.Add(eliteDef.modifierToken, ElitePrefixName + " {0}"); //If we want to load our own, uncomment the one below. EliteMaterial = Resources.Load <Material>("@Aetherium:Assets/Textures/Materials/ApollosBrillianceMain.mat"); }
public override void SetupAttributes() { base.SetupAttributes(); if (KaliberWrath_Enable) { equipmentDef.canDrop = true; equipmentDef.enigmaCompatible = false; var jammedEliteDef = new CustomElite( new EliteDef { name = "Jammed", modifierToken = "ROB_ELITE_MODIFIER_JAMMED", color = new Color32(150, 10, 10, 255), eliteEquipmentIndex = equipmentDef.equipmentIndex }, 1); JammedEliteIndex = EliteAPI.Add(jammedEliteDef); LanguageAPI.Add(jammedEliteDef.EliteDef.modifierToken, "Jammed {0}"); var jammedBuffDef = new CustomBuff( new BuffDef { name = "Affix_Jammed", buffColor = new Color32(150, 10, 10, 255), iconPath = "", eliteIndex = JammedEliteIndex, canStack = false }); JammedBuffIndex = BuffAPI.Add(jammedBuffDef); equipmentDef.passiveBuff = JammedBuffIndex; JammedEliteCard = new EliteAffixCard { spawnWeight = 0.8f, costMultiplier = 15.0f, damageBoostCoeff = 1.0f, healthBoostCoeff = 4.0f, eliteOnlyScaling = 0.5f, eliteType = JammedEliteIndex, }; EsoLib.Cards.Add(JammedEliteCard); } }
public override void SetupAttributes() { base.SetupAttributes(); equipmentDef.canDrop = false; equipmentDef.enigmaCompatible = false; equipmentDef.cooldown = 60; var buffDef = new RoR2.BuffDef { name = EliteBuffName, buffColor = new Color32(255, 255, 255, byte.MaxValue), iconPath = EliteBuffIconPath, canStack = false, }; buffDef.eliteIndex = EliteIndex; var buffIndex = new CustomBuff(buffDef); EliteBuffIndex = BuffAPI.Add(buffIndex); equipmentDef.passiveBuff = EliteBuffIndex; var eliteDef = new RoR2.EliteDef { name = ElitePrefixName, modifierToken = EliteModifierString, color = buffDef.buffColor, }; eliteDef.eliteEquipmentIndex = equipmentDef.equipmentIndex; var eliteIndex = new CustomElite(eliteDef, EliteTier); EliteIndex = EliteAPI.Add(eliteIndex); var card = new EliteAffixCard { spawnWeight = 0.5f, costMultiplier = 30.0f, damageBoostCoeff = 2.0f, healthBoostCoeff = 4.5f, eliteOnlyScaling = 0.5f, eliteType = EliteIndex }; EsoLib.Cards.Add(card); EliteCard = card; LanguageAPI.Add(eliteDef.modifierToken, ElitePrefixName + " {0}"); //If we want to load a base game material, then we use this. /*GameObject worm = Resources.Load<GameObject>("Prefabs/characterbodies/ElectricWormBody"); * Debug.Log($"WORM: {worm}"); * var modelLocator = worm.GetComponent<ModelLocator>(); * Debug.Log($"MODEL LOCATOR: {modelLocator}"); * var model = modelLocator.modelTransform.GetComponent<CharacterModel>(); * Debug.Log($"MODEL: {model}"); * if (model) * { * var rendererInfos = model.baseRendererInfos; * foreach (CharacterModel.RendererInfo renderer in rendererInfos) * { * if (renderer.defaultMaterial.name == "matElectricWorm") * { * HyperchargedMaterial = renderer.defaultMaterial; * } * } * }*/ //If we want to load our own, uncomment the one below. EliteMaterial = Resources.Load <Material>("@Aetherium:Assets/Textures/Materials/TheirReminder.mat"); }
public static bool Init() { On.RoR2.GlobalEventManager.ServerDamageDealt += GlobalEventManager_ServerDamageDealt; var equipDef = new EquipmentDef { name = EquipName, cooldown = 10f, pickupModelPath = "", pickupIconPath = "", nameToken = EquipName, pickupToken = "Pickup_Blightborne", descriptionToken = "Description_Blightborne", canDrop = false, enigmaCompatible = false }; var equip = new CustomEquipment(equipDef, new ItemDisplayRule[0]); var buffDef = new BuffDef { name = BuffName, buffColor = new Color32(141, 51, 19, 255), iconPath = "", canStack = false }; var buff = new CustomBuff(buffDef); var eliteDef = new EliteDef { name = EliteName, modifierToken = "ELITE_MODIFIER_BLIGHTBORNE", color = buffDef.buffColor, eliteEquipmentIndex = _equipIndex }; var elite = new CustomElite(eliteDef, 1); _eliteIndex = EliteAPI.Add(elite); _buffIndex = BuffAPI.Add(buff); _equipIndex = ItemAPI.Add(equip); eliteDef.eliteEquipmentIndex = _equipIndex; equipDef.passiveBuff = _buffIndex; buffDef.eliteIndex = _eliteIndex; On.RoR2.CharacterBody.OnEquipmentLost += CharacterBody_OnEquipmentLost; On.RoR2.CharacterBody.OnEquipmentGained += CharacterBody_OnEquipmentGained; var card = new EliteAffixCard { spawnWeight = 0.5f, costMultiplier = 16f, damageBoostCoeff = 2.0f, healthBoostCoeff = 8.0f, eliteOnlyScaling = 1f, eliteType = _eliteIndex, onSpawned = OnSpawned, isAvailable = new Func <bool>(() => Run.instance.stageClearCount > 3 && Run.instance.selectedDifficulty != DifficultyIndex.Easy) }; //Register the card for spawning if ESO is enabled EsoLib.Cards.Add(card); Card = card; //Description of elite in UI when boss LanguageAPI.Add(eliteDef.modifierToken, "Blightborne {0}"); LanguageAPI.Add(equipDef.pickupToken, "Blight's Embrace"); LanguageAPI.Add(equipDef.descriptionToken, "Become an aspect of Blight"); return(true); }
public static bool Init() { On.RoR2.GlobalEventManager.OnCharacterDeath += GlobalEventManager_OnCharacterDeath; var equipDef = new EquipmentDef { name = EquipName, cooldown = 10f, pickupModelPath = "", pickupIconPath = "", nameToken = EquipName, pickupToken = "Pickup_Tarborne", descriptionToken = "Description_Tarborne", canDrop = false, enigmaCompatible = false }; On.RoR2.CharacterBody.OnEquipmentLost += CharacterBody_OnEquipmentLost; On.RoR2.CharacterBody.OnEquipmentGained += CharacterBody_OnEquipmentGained; var equip = new CustomEquipment(equipDef, new ItemDisplayRule[0]); var buffDef = new BuffDef { name = BuffName, buffColor = new Color32(41, 41, 41, 255), iconPath = "", canStack = false }; var buff = new CustomBuff(buffDef); var eliteDef = new EliteDef { name = EliteName, modifierToken = "ELITE_MODIFIER_TARBORNE", color = buffDef.buffColor, eliteEquipmentIndex = _equipIndex }; var elite = new CustomElite(eliteDef, 1); _eliteIndex = EliteAPI.Add(elite); _buffIndex = BuffAPI.Add(buff); _equipIndex = ItemAPI.Add(equip); eliteDef.eliteEquipmentIndex = _equipIndex; equipDef.passiveBuff = _buffIndex; buffDef.eliteIndex = _eliteIndex; var card = new EliteAffixCard { spawnWeight = 1f, costMultiplier = 6f, damageBoostCoeff = 2.0f, healthBoostCoeff = 4.0f, eliteOnlyScaling = 1f, eliteType = _eliteIndex, onSpawned = OnSpawned, isAvailable = new Func <bool>(() => true) }; //Register the card for spawning if ESO is enabled EsoLib.Cards.Add(card); Card = card; //Description of elite in UI when boss LanguageAPI.Add(eliteDef.modifierToken, "Tarborne {0}"); LanguageAPI.Add(equipDef.pickupToken, "Dunestrider's Dominion"); LanguageAPI.Add(equipDef.descriptionToken, "Become an aspect of Tar"); return(true); }
public override void SetupAttributes() { base.SetupAttributes(); equipmentDef.canDrop = false; equipmentDef.enigmaCompatible = false; equipmentDef.cooldown = 60; var buffDef = new RoR2.BuffDef { name = EliteBuffName, buffColor = new Color32(255, 255, 255, byte.MaxValue), iconPath = EliteBuffIconPath, canStack = false, }; buffDef.eliteIndex = EliteIndex; var buffIndex = new CustomBuff(buffDef); EliteBuffIndex = BuffAPI.Add(buffIndex); equipmentDef.passiveBuff = EliteBuffIndex; var eliteDef = new RoR2.EliteDef { name = ElitePrefixName, modifierToken = EliteModifierString, color = buffDef.buffColor, }; eliteDef.eliteEquipmentIndex = equipmentDef.equipmentIndex; var eliteIndex = new CustomElite(eliteDef, EliteTier); EliteIndex = EliteAPI.Add(eliteIndex); var card = new EliteAffixCard { spawnWeight = 0.5f, costMultiplier = 30.0f, damageBoostCoeff = 2.0f, healthBoostCoeff = 4.5f, eliteOnlyScaling = 0.5f, eliteType = EliteIndex }; EsoLib.Cards.Add(card); EliteCard = card; LanguageAPI.Add(eliteDef.modifierToken, ElitePrefixName + " {0}"); //If we want to load a base game material, then we use this. /*GameObject worm = Resources.Load<GameObject>("Prefabs/characterbodies/ElectricWormBody"); * Debug.Log($"WORM: {worm}"); * var modelLocator = worm.GetComponent<ModelLocator>(); * Debug.Log($"MODEL LOCATOR: {modelLocator}"); * var model = modelLocator.modelTransform.GetComponent<CharacterModel>(); * Debug.Log($"MODEL: {model}"); * if (model) * { * var rendererInfos = model.baseRendererInfos; * foreach (CharacterModel.RendererInfo renderer in rendererInfos) * { * if (renderer.defaultMaterial.name == "matElectricWorm") * { * HyperchargedMaterial = renderer.defaultMaterial; * } * } * }*/ //If we want to load our own, uncomment the one below. EliteMaterial = Resources.Load <Material>("@Aetherium:Assets/Textures/Materials/TheirReminder.mat"); HyperchargedProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/LightningStake"), "HyperchargedProjectile", true); var controller = HyperchargedProjectile.GetComponent <ProjectileController>(); controller.startSound = "Play_titanboss_shift_shoot"; var impactExplosion = HyperchargedProjectile.GetComponent <RoR2.Projectile.ProjectileImpactExplosion>(); impactExplosion.lifetime = 0.5f; impactExplosion.impactEffect = Resources.Load <GameObject>("Prefabs/Effects/ImpactEffects/LightningStrikeImpact"); impactExplosion.blastRadius = 7f; impactExplosion.bonusBlastForce = new Vector3(0, 750, 0); // register it for networking if (HyperchargedProjectile) { PrefabAPI.RegisterNetworkPrefab(HyperchargedProjectile); } // add it to the projectile catalog or it won't work in multiplayer RoR2.ProjectileCatalog.getAdditionalEntries += list => { list.Add(HyperchargedProjectile); }; }
public override void SetupAttributes() { base.SetupAttributes(); equipmentDef.canDrop = false; equipmentDef.enigmaCompatible = false; equipmentDef.cooldown = 40; var buffDef = new RoR2.BuffDef { name = EliteBuffName, buffColor = new Color32(255, 255, 255, byte.MaxValue), iconPath = EliteBuffIconPath, canStack = false, }; buffDef.eliteIndex = EliteIndex; var buffIndex = new CustomBuff(buffDef); EliteBuffIndex = BuffAPI.Add(buffIndex); equipmentDef.passiveBuff = EliteBuffIndex; var eliteDef = new RoR2.EliteDef { name = ElitePrefixName, modifierToken = EliteModifierString, color = buffDef.buffColor, }; eliteDef.eliteEquipmentIndex = equipmentDef.equipmentIndex; var eliteIndex = new CustomElite(eliteDef, EliteTier); EliteIndex = EliteAPI.Add(eliteIndex); var card = new EliteAffixCard { spawnWeight = 0.5f, costMultiplier = 30.0f, damageBoostCoeff = 2.0f, healthBoostCoeff = 4.5f, eliteOnlyScaling = 0.5f, eliteType = EliteIndex }; EsoLib.Cards.Add(card); EliteCard = card; LanguageAPI.Add(eliteDef.modifierToken, ElitePrefixName + " {0}"); RadiantProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/Thermite"), "RadiantProjectile", true); var damage = RadiantProjectile.GetComponent <RoR2.Projectile.ProjectileDamage>(); damage.damageType = DamageType.IgniteOnHit; var simpleProjectile = RadiantProjectile.GetComponent <ProjectileSimple>(); simpleProjectile.velocity = 100; simpleProjectile.oscillateMagnitude = 0; if (RadiantProjectile) { PrefabAPI.RegisterNetworkPrefab(RadiantProjectile); } RoR2.ProjectileCatalog.getAdditionalEntries += list => { list.Add(RadiantProjectile); }; //If we want to load a base game material, then we use this. /*GameObject worm = Resources.Load<GameObject>("Prefabs/characterbodies/ElectricWormBody"); * Debug.Log($"WORM: {worm}"); * var modelLocator = worm.GetComponent<ModelLocator>(); * Debug.Log($"MODEL LOCATOR: {modelLocator}"); * var model = modelLocator.modelTransform.GetComponent<CharacterModel>(); * Debug.Log($"MODEL: {model}"); * if (model) * { * var rendererInfos = model.baseRendererInfos; * foreach (CharacterModel.RendererInfo renderer in rendererInfos) * { * if (renderer.defaultMaterial.name == "matElectricWorm") * { * HyperchargedMaterial = renderer.defaultMaterial; * } * } * }*/ //If we want to load our own, uncomment the one below. EliteMaterial = Resources.Load <Material>("@Aetherium:Assets/Textures/Materials/ApollosBrillianceMain.mat"); //Shader hotpoo = Resources.Load<Shader>("Shaders/Deferred/hgstandard"); }
public void Test() { var defaultIcon = Addressables.LoadAssetAsync <Sprite>("RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion(); Assert.True(defaultIcon); var eliteBuffDef = ScriptableObject.CreateInstance <BuffDef>(); eliteBuffDef.name = "R2APITest_EliteBuffDef"; eliteBuffDef.buffColor = new Color32(255, 255, 255, byte.MaxValue); eliteBuffDef.iconSprite = defaultIcon; eliteBuffDef.canStack = false; const string EliteAffixToken = "R2APITEST_eliteEquipmentDefAffixToken"; const string RegisteredToken = "_REGISTERED"; LanguageAPI.Add(EliteAffixToken, EliteAffixToken + RegisteredToken); var eliteEquipmentDef = ScriptableObject.CreateInstance <EquipmentDef>(); eliteEquipmentDef.name = "ELITE_EQUIPMENT_" + EliteAffixToken; LanguageAPI.Add(eliteEquipmentDef.name, eliteEquipmentDef.name + RegisteredToken); eliteEquipmentDef.nameToken = "ELITE_EQUIPMENT_" + EliteAffixToken + "_NAME"; LanguageAPI.Add(eliteEquipmentDef.nameToken, eliteEquipmentDef.nameToken + RegisteredToken); eliteEquipmentDef.pickupToken = "ELITE_EQUIPMENT_" + EliteAffixToken + "_PICKUP"; LanguageAPI.Add(eliteEquipmentDef.pickupToken, eliteEquipmentDef.pickupToken + RegisteredToken); eliteEquipmentDef.descriptionToken = "ELITE_EQUIPMENT_" + EliteAffixToken + "_DESCRIPTION"; LanguageAPI.Add(eliteEquipmentDef.descriptionToken, eliteEquipmentDef.descriptionToken + RegisteredToken); eliteEquipmentDef.loreToken = "ELITE_EQUIPMENT_" + EliteAffixToken + "_LORETOKEN"; LanguageAPI.Add(eliteEquipmentDef.loreToken, eliteEquipmentDef.loreToken + RegisteredToken); eliteEquipmentDef.pickupModelPrefab = null; eliteEquipmentDef.pickupIconSprite = defaultIcon; eliteEquipmentDef.appearsInSinglePlayer = true; eliteEquipmentDef.appearsInMultiPlayer = true; eliteEquipmentDef.canDrop = true; eliteEquipmentDef.cooldown = 2; eliteEquipmentDef.enigmaCompatible = false; eliteEquipmentDef.isBoss = false; eliteEquipmentDef.isLunar = false; eliteEquipmentDef.passiveBuffDef = eliteBuffDef; ItemDisplayRule[] itemDisplayRules = null; var customEquipment = new CustomEquipment(eliteEquipmentDef, itemDisplayRules); Assert.True(ItemAPI.Add(customEquipment)); var customEliteTierDefs = new CombatDirector.EliteTierDef[] { new CombatDirector.EliteTierDef() { costMultiplier = CombatDirector.baseEliteCostMultiplier, eliteTypes = Array.Empty <EliteDef>(), isAvailable = SetAvailability, }, }; foreach (var eliteTierDef in customEliteTierDefs) { EliteAPI.AddCustomEliteTier(eliteTierDef); } var customEliteDef = ScriptableObject.CreateInstance <EliteDef>(); customEliteDef.healthBoostCoefficient = 2; customEliteDef.color = new Color32(255, 0, 0, byte.MaxValue); customEliteDef.eliteEquipmentDef = eliteEquipmentDef; customEliteDef.damageBoostCoefficient = 2; customEliteDef.modifierToken = "R2API_TEST_ELITEDEF_MODIFIERTOKEN"; LanguageAPI.Add(customEliteDef.modifierToken, customEliteDef.modifierToken + RegisteredToken); customEliteDef.shaderEliteRampIndex = 0; eliteBuffDef.eliteDef = customEliteDef; Assert.True(EliteAPI.Add(new CustomElite(customEliteDef, customEliteTierDefs))); // this may break, but right now thats the index where our custom tier should end up const int ourIndex = 1; Assert.True(CombatDirector.eliteTiers[ourIndex].costMultiplier == 6); // Should be length 0 if its our custom tier def, // the eliteDef will be added when content packs get added to game content. (EliteAPI.AddElitesToGame) Assert.True(CombatDirector.eliteTiers[ourIndex].eliteTypes.Length == 0); }
public override void SetupAttributes() { if (ItemBodyModelPrefab == null) { ItemBodyModelPrefab = Resources.Load <GameObject>("@Aetherium:Assets/Models/Prefabs/HisVengeanceDisplay.prefab"); SecondaryItemBodyModelPrefab = Resources.Load <GameObject>("@Aetherium:Assets/Models/Prefabs/HisVengeanceCluster.prefab"); displayRules = GenerateItemDisplayRules(); } base.SetupAttributes(); equipmentDef.canDrop = false; equipmentDef.enigmaCompatible = false; var buffDef = new RoR2.BuffDef { name = EliteBuffName, buffColor = new Color32(255, 255, 255, byte.MaxValue), iconPath = EliteBuffIconPath, canStack = false, }; buffDef.eliteIndex = EliteIndex; var buffIndex = new CustomBuff(buffDef); EliteBuffIndex = BuffAPI.Add(buffIndex); equipmentDef.passiveBuff = EliteBuffIndex; var eliteDef = new RoR2.EliteDef { name = ElitePrefixName, modifierToken = EliteModifierString, color = buffDef.buffColor, }; eliteDef.eliteEquipmentIndex = equipmentDef.equipmentIndex; var eliteIndex = new CustomElite(eliteDef, EliteTier); EliteIndex = EliteAPI.Add(eliteIndex); var card = new EliteAffixCard { spawnWeight = 0.5f, costMultiplier = 15.0f, damageBoostCoeff = 2.0f, healthBoostCoeff = 2.0f, eliteOnlyScaling = 0.5f, eliteType = EliteIndex }; EsoLib.Cards.Add(card); EliteCard = card; LanguageAPI.Add(eliteDef.modifierToken, ElitePrefixName + " {0}"); EliteMaterial = Resources.Load <Material>("@Aetherium:Assets/Textures/Materials/HisVengeanceBody.mat"); SplinteringProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/ImpVoidspikeProjectile"), "SplinteringProjectile", true); var model = Resources.Load <GameObject>("@Aetherium:Assets/Models/Prefabs/HisVengeanceProjectile.prefab"); model.AddComponent <NetworkIdentity>(); var ghost = model.AddComponent <RoR2.Projectile.ProjectileGhostController>(); var controller = SplinteringProjectile.GetComponent <RoR2.Projectile.ProjectileController>(); controller.procCoefficient = 0.25f; controller.ghostPrefab = model; var damage = SplinteringProjectile.GetComponent <RoR2.Projectile.ProjectileDamage>(); damage.damageType = DamageType.Generic; var impactExplosion = SplinteringProjectile.GetComponent <ProjectileImpactExplosion>(); impactExplosion.impactEffect = Resources.Load <GameObject>("Prefabs/Effects/ImpactEffects/ImpactCrowbar"); var stickOnImpact = SplinteringProjectile.GetComponent <RoR2.Projectile.ProjectileStickOnImpact>(); stickOnImpact.stickSoundString = "Play_bellBody_attackLand"; if (SplinteringProjectile) { PrefabAPI.RegisterNetworkPrefab(SplinteringProjectile); } RoR2.ProjectileCatalog.getAdditionalEntries += list => { list.Add(SplinteringProjectile); }; }