public override void SetupBehavior() { base.SetupBehavior(); GameObject commandoGrenadePrefab = Resources.Load <GameObject>("prefabs/projectiles/CommandoGrenadeProjectile"); BombPrefab = commandoGrenadePrefab.InstantiateClone("Bulletstorm_Bomb", true); var BombScale = 1.15f; BombPrefab.transform.localScale = new Vector3(BombScale, BombScale, BombScale); BombPrefab.GetComponent <ProjectileSimple>().desiredForwardSpeed = 25; //default 50 BombPrefab.GetComponent <ProjectileSimple>().lifetime = 5; //default 5 BombPrefab.GetComponent <ProjectileDamage>().damageColorIndex = DamageColorIndex.Item; BombPrefab.GetComponent <ProjectileImpactExplosion>().falloffModel = BlastAttack.FalloffModel.None; //Object.Destroy(BombPrefab.GetComponent<ApplyTorqueOnStart>()); var model = assetBundle.LoadAsset <GameObject>(ProjectileModelPath); var modelScale = 0.20f; model.transform.localScale = new Vector3(modelScale, modelScale, modelScale); model.AddComponent <NetworkIdentity>(); model.AddComponent <ProjectileGhostController>(); var controller = BombPrefab.GetComponent <ProjectileController>(); controller.ghostPrefab = model; //controller.transform.localScale = new Vector3(0.25f, 0.25f, 0.25f); ProjectileAPI.Add(BombPrefab); if (BombPrefab) { PrefabAPI.RegisterNetworkPrefab(BombPrefab); } }
internal override void SetupAttributes() { var oldDef = Resources.Load <SkillDef>("skilldefs/commandobody/ThrowGrenade"); myDef = CloneSkillDef(oldDef); var nametoken = "ANCIENTSCEPTER_SCEPCOMMANDO_GRENADENAME"; newDescToken = "ANCIENTSCEPTER_SCEPCOMMANDO_GRENADEDESC"; oldDescToken = oldDef.skillDescriptionToken; var namestr = "Carpet Bomb"; LanguageAPI.Add(nametoken, namestr); myDef.skillName = namestr; myDef.skillNameToken = nametoken; myDef.skillDescriptionToken = newDescToken; myDef.icon = Assets.mainAssetBundle.LoadAsset <Sprite>("texCommandoR2"); LoadoutAPI.AddSkillDef(myDef); projReplacer = Resources.Load <GameObject>("prefabs/projectiles/CommandoGrenadeProjectile").InstantiateClone("CIScepCommandoGrenade"); var pie = projReplacer.GetComponent <ProjectileImpactExplosion>(); pie.blastDamageCoefficient *= 0.5f; pie.bonusBlastForce *= 0.5f; ProjectileAPI.Add(projReplacer); }
internal override void SetupAttributes() { var oldDef = Resources.Load <SkillDef>("skilldefs/loaderbody/ChargeZapFist"); myDef = CloneSkillDef(oldDef); var nametoken = "ANCIENTSCEPTER_SCEPLOADER_CHARGEZAPFISTNAME"; newDescToken = "ANCIENTSCEPTER_SCEPLOADER_CHARGEZAPFISTDESC"; oldDescToken = oldDef.skillDescriptionToken; var namestr = "Thundercrash"; LanguageAPI.Add(nametoken, namestr); myDef.skillName = namestr; myDef.skillNameToken = nametoken; myDef.skillDescriptionToken = newDescToken; myDef.icon = Assets.mainAssetBundle.LoadAsset <Sprite>("texLoaderU2"); LoadoutAPI.AddSkillDef(myDef); projReplacer = Resources.Load <GameObject>("prefabs/projectiles/LoaderZapCone").InstantiateClone("CIScepLoaderThundercrash"); var proxb = projReplacer.GetComponent <ProjectileProximityBeamController>(); proxb.attackFireCount *= 3; proxb.maxAngleFilter = 180f; projReplacer.transform.Find("Effect").localScale *= 3f; ProjectileAPI.Add(projReplacer); }
public override void SetupBehavior() { base.SetupBehavior(); GameObject engiMinePrefab = Resources.Load <GameObject>("prefabs/projectiles/EngiMine"); minePrefab = engiMinePrefab.InstantiateClone("PanicMine", true); Object.Destroy(minePrefab.GetComponent <ProjectileDeployToOwner>()); GameObject engiMineGhostPrefab = Resources.Load <GameObject>("prefabs/projectileghosts/EngiMineGhost"); mineGhostPrefab = engiMineGhostPrefab.InstantiateClone("PanicMineGhost", false); SkinnedMeshRenderer mesh = mineGhostPrefab.GetComponentInChildren <SkinnedMeshRenderer>(); mesh.material.color = new Color32(255, 168, 0, 255); minePrefab.GetComponent <ProjectileController>().ghostPrefab = mineGhostPrefab; ProjectileAPI.Add(minePrefab); if (Compat_ItemStats.enabled) { Compat_ItemStats.CreateItemStatDef(itemDef, ( (count, inv, master) => { return(baseDmg + (count - 1) * stackDmg); }, (value, inv, master) => { return($"Damage: {Pct(value, 1)}"); } ), ( (count, inv, master) => { return(count); }, (value, inv, master) => { return($"Mines: {value}"); } )); } }
public void CreateProjectiles() { //needs to be declared first GameObject sporeGrenadeDotZonePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectileDotZone"); MolotovDotZonePrefab = sporeGrenadeDotZonePrefab.InstantiateClone("Bulletstorm_MolotovDotZone", true); MolotovDotZonePrefab.GetComponent <ProjectileDamage>().damageType = DamageType.IgniteOnHit; ProjectileDotZone projectileDotZone = MolotovDotZonePrefab.GetComponent <ProjectileDotZone>(); projectileDotZone.damageCoefficient = PercentDamagePerTick; projectileDotZone.resetFrequency = Mathf.Clamp(FrequencyOfTicks, 0f, 60f); projectileDotZone.lifetime = DurationAoE; //projectileDotZone.impactEffect = GlassBreakEffect; GameObject sporeGrenadePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectile"); MolotovPrefab = sporeGrenadePrefab.InstantiateClone("Bulletstorm_Molotov", true); MolotovPrefab.GetComponent <ProjectileDamage>().damageColorIndex = DamageColorIndex.Item; var PIE = MolotovPrefab.GetComponent <ProjectileImpactExplosion>(); if (DurationAoE > 0) { PIE.childrenProjectilePrefab = MolotovDotZonePrefab; } else { Object.Destroy(PIE); } MolotovPrefab.GetComponent <ProjectileSimple>().desiredForwardSpeed = 35; //50 ApplyTorqueOnStart applyTorque = MolotovPrefab.AddComponent <ApplyTorqueOnStart>(); applyTorque.randomize = true; applyTorque.localTorque = new Vector3(400f, 10f, 400f); GameObject model = MainAssets.LoadAsset <GameObject>(ProjectileModelPath); model.AddComponent <NetworkIdentity>(); model.AddComponent <ProjectileGhostController>(); model.transform.localScale = new Vector3(0.25f, 0.25f, 0.25f); var controller = MolotovPrefab.GetComponent <ProjectileController>(); controller.ghostPrefab = model; ProjectileAPI.Add(MolotovPrefab); ProjectileAPI.Add(MolotovDotZonePrefab); if (MolotovPrefab) { PrefabAPI.RegisterNetworkPrefab(MolotovPrefab); } if (MolotovDotZonePrefab) { PrefabAPI.RegisterNetworkPrefab(MolotovDotZonePrefab); } }
/// <summary> /// Sets up the mortar projectile. Always invoke the method if one needs to borrow the mortar prefab. /// </summary> public static void SetupMortarProjectile() { if (mortarPrefab) { return; } GameObject paladinRocket = Resources.Load <GameObject>("prefabs/projectiles/PaladinRocket"); mortarPrefab = paladinRocket.InstantiateClone("MortarProjectile", true); mortarPrefab.AddComponent <MortarGravity>(); ProjectileAPI.Add(mortarPrefab); }
public override void SetupBehavior() { base.SetupBehavior(); GameObject engiMinePrefab = Resources.Load <GameObject>("prefabs/projectiles/EngiMine"); minePrefab = engiMinePrefab.InstantiateClone("FootMine", true); Object.Destroy(minePrefab.GetComponent <ProjectileDeployToOwner>()); GameObject engiMineGhostPrefab = Resources.Load <GameObject>("prefabs/projectileghosts/EngiMineGhost"); mineGhostPrefab = engiMineGhostPrefab.InstantiateClone("FootMineGhost", false); SkinnedMeshRenderer mesh = mineGhostPrefab.GetComponentInChildren <SkinnedMeshRenderer>(); mesh.material.color = Color.green; minePrefab.GetComponent <ProjectileController>().ghostPrefab = mineGhostPrefab; ProjectileAPI.Add(minePrefab); poisonBuff = ScriptableObject.CreateInstance <BuffDef>(); //poisonBuff.buffColor = new Color32(1, 121, 91, 255); poisonBuff.isDebuff = true; poisonBuff.canStack = true; poisonBuff.name = "CCIFootPoison"; poisonBuff.iconSprite = assetBundle.LoadAsset <Sprite>("Assets/ClassicItems/icons/footmine_buff_icon.png"); CustomBuff poisonCustomBuff = new CustomBuff(poisonBuff); BuffAPI.Add(poisonCustomBuff); DotController.DotDef poisonDotDef = new DotController.DotDef { interval = 1, damageCoefficient = 1, damageColorIndex = DamageColorIndex.Poison, associatedBuff = poisonBuff }; poisonDot = DotAPI.RegisterDotDef(poisonDotDef); if (Compat_ItemStats.enabled) { Compat_ItemStats.CreateItemStatDef(itemDef, ( (count, inv, master) => { return(baseDmg + (count - 1) * stackDmg); }, (value, inv, master) => { return($"Poison Damage/Second: {Pct(value, 1)}"); } ), ( (count, inv, master) => { return(baseTicks + (count - 1) * stackTicks); }, (value, inv, master) => { return($"Duration: {value} seconds"); } )); } }
public static void SetupMortarProjectile() { GameObject paladinRocket = Resources.Load <GameObject>("prefabs/projectiles/PaladinRocket"); mortarPrefab = paladinRocket.InstantiateClone("MortarProjectile"); mortarPrefab.AddComponent <MortarGravity>(); var model = MainAssets.LoadAsset <GameObject>("MortarMissile.prefab"); model.AddComponent <NetworkIdentity>(); model.AddComponent <RoR2.Projectile.ProjectileGhostController>(); var controller = mortarPrefab.GetComponent <RoR2.Projectile.ProjectileController>(); controller.ghostPrefab = model; ProjectileAPI.Add(mortarPrefab); }
internal override void SetupAttributes() { var oldDef = Resources.Load <SkillDef>("skilldefs/huntressbody/HuntressBodyArrowRain"); myDef = CloneSkillDef(oldDef); var nametoken = "ANCIENTSCEPTER_SCEPHUNTRESS_RAINNAME"; newDescToken = "ANCIENTSCEPTER_SCEPHUNTRESS_RAINDESC"; oldDescToken = oldDef.skillDescriptionToken; var namestr = "Burning Rain"; LanguageAPI.Add(nametoken, namestr); myDef.skillName = namestr; myDef.skillNameToken = nametoken; myDef.skillDescriptionToken = newDescToken; myDef.icon = Resources.Load <Sprite>("@AncientScepter:Assets/AssetBundle/AncientScepter/Icons/Skills/texHuntressR1.png"); LoadoutAPI.AddSkillDef(myDef); projReplacer = Resources.Load <GameObject>("prefabs/projectiles/HuntressArrowRain").InstantiateClone("CIScepHuntressRain"); projReplacer.GetComponent <ProjectileDamage>().damageType |= DamageType.IgniteOnHit; projReplacer.GetComponent <ProjectileDotZone>().lifetime *= 1.5f; projReplacer.transform.localScale = new Vector3(22.5f, 15f, 22.5f); var fx = projReplacer.transform.Find("FX"); var afall = fx.Find("ArrowsFalling"); afall.GetComponent <ParticleSystemRenderer>().material.SetVector("_TintColor", new Vector4(3f, 0.1f, 0.04f, 1.5f)); var aimp = fx.Find("ImpaledArrow"); aimp.GetComponent <ParticleSystemRenderer>().material.SetVector("_TintColor", new Vector4(3f, 0.1f, 0.04f, 1.5f)); var radInd = fx.Find("RadiusIndicator"); radInd.GetComponent <MeshRenderer>().material.SetVector("_TintColor", new Vector4(3f, 0.1f, 0.04f, 1.25f)); var flash = fx.Find("ImpactFlashes"); var psm = flash.GetComponent <ParticleSystem>().main; psm.startColor = new Color(1f, 0.7f, 0.4f); flash.GetComponent <ParticleSystemRenderer>().material.SetVector("_TintColor", new Vector4(3f, 0.1f, 0.04f, 1.5f)); var flashlight = flash.Find("Point Light"); flashlight.GetComponent <Light>().color = new Color(1f, 0.5f, 0.3f); flashlight.GetComponent <Light>().range = 15f; flashlight.gameObject.SetActive(true); ProjectileAPI.Add(projReplacer); }
private void SetupProjectile() { //CharacterBody component = this.owner.GetComponent<CharacterBody>(); //if (component) //{ // RoR2.Projectile.ProjectileManager.instance.FireProjectile() // Vector2 vector = UnityEngine.Random.insideUnitCircle * this.randomCircleRange; // ProjectileManager.instance.FireProjectile(this.projectilePrefab, base.transform.position + new Vector3(vector.x, 0f, vector.y), Util.QuaternionSafeLookRotation(Vector3.up + new Vector3(vector.x, 0f, vector.y)), this.owner, component.damage * this.damageCoefficient, 200f, this.crit, DamageColorIndex.Item, null, -1f); //} AspectProjectile = PrefabAPI.InstantiateClone( Resources.Load <GameObject>("prefabs/projectiles/MissileProjectile"), "Aspect Projectile", true); // Add required components // May be redundant since I already copy from missile, but it doesn't hurt to configure it again // Who knows, maybe they remove some of the components in the future TryGetComponent <ProjectileTargetComponent>(AspectProjectile); var projectileDirectionalTargetFinder = TryGetComponent <ProjectileDirectionalTargetFinder>(AspectProjectile); projectileDirectionalTargetFinder.lookRange = 250; projectileDirectionalTargetFinder.lookCone = 160; projectileDirectionalTargetFinder.targetSearchInterval = 0.1f; projectileDirectionalTargetFinder.onlySearchIfNoTarget = true; projectileDirectionalTargetFinder.allowTargetLoss = false; projectileDirectionalTargetFinder.testLoS = false; projectileDirectionalTargetFinder.ignoreAir = false; projectileDirectionalTargetFinder.flierAltitudeTolerance = float.PositiveInfinity; var projectileHoming = TryGetComponent <ProjectileSteerTowardTarget>(AspectProjectile); projectileHoming.rotationSpeed = 90; projectileHoming.yAxisOnly = false; var projectileSimple = TryGetComponent <ProjectileSimple>(AspectProjectile); //projectileSimple.enableVelocityOverLifetime = true; projectileSimple.updateAfterFiring = true; projectileSimple.desiredForwardSpeed = 100; //projectileSimple.velocityOverLifetime = new AnimationCurve(new Keyframe[] { new Keyframe(0, 40), new Keyframe(2, 100) }); projectileSimple.lifetime = 10; PrefabAPI.RegisterNetworkPrefab(AspectProjectile); ProjectileAPI.Add(AspectProjectile); }
public override void SetupBehavior() { base.SetupBehavior(); GameObject engiMinePrefab = Resources.Load <GameObject>("prefabs/projectiles/EngiMine"); minePrefab = engiMinePrefab.InstantiateClone("InstantMine", true); Object.Destroy(minePrefab.GetComponent <ProjectileDeployToOwner>()); GameObject engiMineGhostPrefab = Resources.Load <GameObject>("prefabs/projectileghosts/EngiMineGhost"); mineGhostPrefab = engiMineGhostPrefab.InstantiateClone("InstantMineGhost", false); SkinnedMeshRenderer mesh = mineGhostPrefab.GetComponentInChildren <SkinnedMeshRenderer>(); mesh.material.color = new Color32(111, 95, 52, 255); minePrefab.GetComponent <ProjectileController>().ghostPrefab = mineGhostPrefab; ProjectileAPI.Add(minePrefab); }
private static void SetupProjectiles() { projectileBombletsPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/projectiles/CryoCanisterBombletsProjectile"), "ClusterBombletsArrow"); ProjectileImpactExplosion projectileImpactExplosion1 = projectileBombletsPrefab.GetComponent <ProjectileImpactExplosion>(); projectileImpactExplosion1.lifetime = 0.5f; projectileBombletsPrefab.GetComponent <ProjectileDamage>().damageType = DamageType.Generic; projectilePrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/projectiles/PaladinRocket"), "ClusterBombletsArrow"); var projectileSimple = projectilePrefab.GetComponent <ProjectileSimple>(); projectileSimple.desiredForwardSpeed = 150; var projectileImpactExplosion = projectilePrefab.GetComponent <ProjectileImpactExplosion>(); projectileImpactExplosion.lifetime = 8; projectileImpactExplosion.lifetimeAfterImpact = 0; //projectileImpactExplosion.blastRadius = 0; projectileImpactExplosion.blastDamageCoefficient = clusterBombDamageCoefficient; projectileImpactExplosion.blastProcCoefficient = 0; projectileImpactExplosion.blastAttackerFiltering = AttackerFiltering.Default; projectileImpactExplosion.fireChildren = true; projectileImpactExplosion.childrenProjectilePrefab = projectileBombletsPrefab; projectileImpactExplosion.childrenCount = clusterBombChildCount; projectileImpactExplosion.childrenDamageCoefficient = clusterBombChildDamageCoefficient; projectileImpactExplosion.minAngleOffset = new Vector3(-2, -2, -2); projectileImpactExplosion.maxAngleOffset = new Vector3(2, 2, 2); projectileImpactExplosion.useLocalSpaceForChildren = false; if (projectileBombletsPrefab) { PrefabAPI.RegisterNetworkPrefab(projectileBombletsPrefab); } if (projectilePrefab) { PrefabAPI.RegisterNetworkPrefab(projectilePrefab); } ProjectileAPI.Add(projectileBombletsPrefab); ProjectileAPI.Add(projectilePrefab); }
internal override void SetupAttributes() { var oldDef = Resources.Load <SkillDef>("skilldefs/magebody/MageBodyFlamethrower"); myDef = CloneSkillDef(oldDef); var nametoken = "ANCIENTSCEPTER_SCEPMAGE_FLAMETHROWERNAME"; newDescToken = "ANCIENTSCEPTER_SCEPMAGE_FLAMETHROWERDESC"; oldDescToken = oldDef.skillDescriptionToken; var namestr = "Dragon's Breath"; LanguageAPI.Add(nametoken, namestr); myDef.skillName = namestr; myDef.skillNameToken = nametoken; myDef.skillDescriptionToken = newDescToken; myDef.icon = Assets.mainAssetBundle.LoadAsset <Sprite>("texArtiR1"); LoadoutAPI.AddSkillDef(myDef); projCloud = Resources.Load <GameObject>("prefabs/projectiles/BeetleQueenAcid").InstantiateClone("CIScepMageFlamethrowerCloud"); var pdz = projCloud.GetComponent <ProjectileDotZone>(); pdz.lifetime = 10f; pdz.impactEffect = null; pdz.fireFrequency = 2f; var fxObj = projCloud.transform.Find("FX"); fxObj.Find("Spittle").gameObject.SetActive(false); fxObj.Find("Decal").gameObject.SetActive(false); fxObj.Find("Gas").gameObject.SetActive(false); foreach (var x in fxObj.GetComponents <AnimateShaderAlpha>()) { x.enabled = false; } var fxcloud = UnityEngine.Object.Instantiate(Resources.Load <GameObject>("prefabs/FireTrail").GetComponent <DamageTrail>().segmentPrefab, fxObj.transform); var psmain = fxcloud.GetComponent <ParticleSystem>().main; psmain.duration = 10f; psmain.gravityModifier = -0.05f; var pstartx = psmain.startSizeX; pstartx.constantMin *= 0.75f; pstartx.constantMax *= 0.75f; var pstarty = psmain.startSizeY; pstarty.constantMin *= 0.75f; pstarty.constantMax *= 0.75f; var pstartz = psmain.startSizeZ; pstartz.constantMin *= 0.75f; pstartz.constantMax *= 0.75f; var pslife = psmain.startLifetime; pslife.constantMin = 0.75f; pslife.constantMax = 1.5f; fxcloud.GetComponent <DestroyOnTimer>().enabled = false; fxcloud.transform.localPosition = Vector3.zero; fxcloud.transform.localScale = Vector3.one; var psshape = fxcloud.GetComponent <ParticleSystem>().shape; psshape.shapeType = ParticleSystemShapeType.Sphere; psshape.scale = Vector3.one * 1.5f; var psemit = fxcloud.GetComponent <ParticleSystem>().emission; psemit.rateOverTime = AncientScepterItem.artiFlamePerformanceMode ? 4f : 20f; var lightObj = fxObj.Find("Point Light").gameObject; if (AncientScepterItem.artiFlamePerformanceMode) { UnityEngine.Object.Destroy(lightObj); } else { var lightCpt = lightObj.GetComponent <Light>(); lightCpt.color = new Color(1f, 0.5f, 0.2f); lightCpt.intensity = 3.5f; lightCpt.range = 5f; } ProjectileAPI.Add(projCloud); }
private static void SetupProjectiles() { SetupAcidPool(); SetupAcidPoolDrop(); void SetupAcidPool() { acidPool = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/projectiles/CrocoLeapAcid"), "CrocoSpeedAcid"); acidPool.transform.localScale *= acidPoolScale; var buffWard = acidPool.AddComponent <BuffWard>(); buffWard.buffDef = RoR2Content.Buffs.CloakSpeed; buffWard.buffDuration = CausticSludgeBuffDuration; buffWard.expires = false; buffWard.floorWard = true; buffWard.radius = CausticSludgeActualScale; buffWard.requireGrounded = true; buffWard.interval *= 0.5f; var enemyBuffWard = acidPool.AddComponent <BuffWard>(); enemyBuffWard.buffDef = RoR2Content.Buffs.Slow60; enemyBuffWard.buffDuration = CausticSludgeBuffDuration; enemyBuffWard.expires = false; enemyBuffWard.floorWard = true; enemyBuffWard.radius = CausticSludgeActualScale; enemyBuffWard.requireGrounded = true; enemyBuffWard.invertTeamFilter = true; ProjectileDotZone projectileDotZone = acidPool.GetComponent <ProjectileDotZone>(); projectileDotZone.damageCoefficient = CausticSludgeDamageCoefficient; projectileDotZone.lifetime = CausticSludgeLifetime; projectileDotZone.overlapProcCoefficient = 0f; PoisonSplatController poisonSplatController = acidPool.AddComponent <PoisonSplatController>(); poisonSplatController.destroyOnTimer = acidPool.GetComponent <DestroyOnTimer>(); poisonSplatController.projectileDotZone = projectileDotZone; poisonSplatController.projectileController = acidPool.GetComponent <ProjectileController>(); ProjectileAPI.Add(acidPool); LeapDropAcid.groundedAcid = acidPool; } void SetupAcidPoolDrop() { Debug.Log("Setting up AcidPoolDrop"); acidPoolDrop = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectile"), "CrocoSpeedAcidDrop"); acidPoolDrop.GetComponent <ProjectileSimple>().desiredForwardSpeed = 0; var atos = acidPoolDrop.AddComponent <ApplyTorqueOnStart>(); atos.localTorque = Vector3.down * 3f; atos.randomize = false; var projectileImpactExplosion = acidPoolDrop.GetComponent <ProjectileImpactExplosion>(); projectileImpactExplosion.blastDamageCoefficient = 0f; projectileImpactExplosion.childrenProjectilePrefab = acidPool; projectileImpactExplosion.impactEffect = null; projectileImpactExplosion.destroyOnEnemy = false; acidPoolDrop.AddComponent <PoisonFallController>(); ProjectileAPI.Add(acidPoolDrop); } LeapDropAcid.projectilePrefab = acidPoolDrop; }