public override void SetupBehavior() { base.SetupBehavior(); GameObject warbannerPrefab = Resources.Load <GameObject>("Prefabs/NetworkedObjects/WarbannerWard"); CharmWardPrefab = warbannerPrefab.InstantiateClone("Bulletstorm_CharmHornWard", true); BuffWard buffWard = CharmWardPrefab.GetComponent <BuffWard>(); buffWard.expires = true; buffWard.expireDuration = 0.6f; buffWard.buffDuration = CharmDuration; buffWard.invertTeamFilter = true; buffWard.animateRadius = false; buffWard.floorWard = false; buffWard.buffDef = Shared.Buffs.BuffsController.Charm; SkinnedMeshRenderer mesh = CharmWardPrefab.GetComponentInChildren <SkinnedMeshRenderer>(); mesh.material.color = new Color32(217, 20, 194, 255); if (CharmWardPrefab) { PrefabAPI.RegisterNetworkPrefab(CharmWardPrefab); } }
public void CharmNearby(CharacterBody body, float radius) { if (NetworkServer.active) { GameObject gameObject = UnityEngine.Object.Instantiate(CharmWardPrefab, body.transform.position, Quaternion.identity); gameObject.GetComponent <TeamFilter>().teamIndex = body.teamComponent.teamIndex; BuffWard buffWard = gameObject.GetComponent <BuffWard>(); buffWard.buffDef = Shared.Buffs.BuffsController.Charm; buffWard.GetComponent <BuffWard>().Networkradius *= radius; buffWard.GetComponent <BuffWard>().radius *= radius; NetworkServer.Spawn(gameObject); } }
public override void OnEnter() { VoidRiftTracker tracker = base.gameObject.GetComponent <VoidRiftTracker>(); missionController = CRMissionController.instance; childLocator = tracker.childLocator; rangeIndicator = childLocator.FindChild("RangeIndicator"); buffIndicator = childLocator.FindChild("BuffIndicator"); voidBuffWard = tracker.voidWard; protectionBuffWard = tracker.protectionWard; }
private void BuffWard_BuffTeam(On.RoR2.BuffWard.orig_BuffTeam orig, BuffWard self, IEnumerable <TeamComponent> recipients, float radiusSqr, Vector3 currentPosition) { if (self.buffDef == RoR2Content.Buffs.AffixHauntedRecipient || self.buffDef == RoR2Content.Buffs.Cloak) { var newList = recipients.ToList(); foreach (var recipient in recipients) { var comp = recipient.GetComponent <SetStateOnHurt>(); if (comp && comp.targetStateMachine && comp.targetStateMachine.state is ShockState) { newList.Remove(recipient); } } recipients = newList; } orig(self, recipients, radiusSqr, currentPosition); }
public override void SetupBehavior() { base.SetupBehavior(); GameObject warbannerPrefab = Resources.Load <GameObject>("Prefabs/NetworkedObjects/WarbannerWard"); MagazinePrefab = warbannerPrefab.InstantiateClone("Bulletstorm_MagazineRackObject", true); BuffWard buffWard = MagazinePrefab.GetComponent <BuffWard>(); buffWard.Networkradius = EffectRadius; buffWard.radius = EffectRadius; buffWard.expires = true; buffWard.expireDuration = EffectDuration; buffWard.buffDef = RoR2Content.Buffs.NoCooldowns; if (MagazinePrefab) { PrefabAPI.RegisterNetworkPrefab(MagazinePrefab); } }
public static void RegisterProjectiles() { //would like to simplify this all eventually.... #region SpinningSlashShockwave shockwave = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/BrotherSunderWave"), "PaladinShockwave", true); shockwave.transform.GetChild(0).transform.localScale = new Vector3(10, 1.5f, 1); shockwave.GetComponent <ProjectileCharacterController>().lifetime = 0.5f; shockwave.GetComponent <ProjectileDamage>().damageType = DamageType.Stun1s; GameObject shockwaveGhost = PrefabAPI.InstantiateClone(shockwave.GetComponent <ProjectileController>().ghostPrefab, "PaladinShockwaveGhost", false); shockwaveGhost.transform.GetChild(0).transform.localScale = new Vector3(10, 1, 1); shockwaveGhost.transform.GetChild(1).transform.localScale = new Vector3(10, 1.5f, 1); PaladinPlugin.Destroy(shockwaveGhost.transform.GetChild(0).Find("Infection, World").gameObject); PaladinPlugin.Destroy(shockwaveGhost.transform.GetChild(0).Find("Water").gameObject); //Material shockwaveMat = Resources.Load<GameObject>("Prefabs/Projectiles/LunarWispTrackingBomb").GetComponent<ProjectileController>().ghostPrefab.transform.GetChild(0).GetComponent<ParticleSystemRenderer>().material; shockwaveGhost.transform.GetChild(1).GetComponent <MeshRenderer>().material = Modules.Assets.matMeteorIndicator; shockwave.GetComponent <ProjectileController>().ghostPrefab = shockwaveGhost; #endregion #region LunarShard lunarShard = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/LunarShardProjectile"), "PaladinLunarShard", true); PaladinPlugin.Destroy(lunarShard.GetComponent <ProjectileSteerTowardTarget>()); lunarShard.GetComponent <ProjectileImpactExplosion>().blastDamageCoefficient = 1f; #endregion #region SunlightSpear lightningSpear = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/MageLightningBombProjectile"), "LightningSpear", true); lightningSpear.AddComponent <Misc.ProjectileOverchargeOnImpact>(); GameObject spearGhost = Assets.lightningSpear.InstantiateClone("LightningSpearGhost", false); spearGhost.AddComponent <ProjectileGhostController>(); //vfx foreach (ParticleSystemRenderer i in spearGhost.GetComponentsInChildren <ParticleSystemRenderer>()) { if (i) { i.trailMaterial = Modules.Assets.matYellowLightningLong; } } Light light = spearGhost.GetComponentInChildren <Light>(); light.range = 16f; light.intensity = 32f; spearGhost.GetComponentInChildren <TrailRenderer>().material = Modules.Assets.matYellowLightningLong; lightningSpear.transform.localScale *= 2f; lightningSpear.GetComponent <ProjectileController>().ghostPrefab = spearGhost; //lightningSpear.GetComponent<ProjectileOverlapAttack>().impactEffect = Assets.lightningImpactFX; lightningSpear.GetComponent <ProjectileDamage>().damageType = DamageType.Shock5s; lightningSpear.GetComponent <ProjectileImpactExplosion>().impactEffect = Assets.altLightningImpactFX; lightningSpear.GetComponent <Rigidbody>().useGravity = false; PaladinPlugin.Destroy(lightningSpear.GetComponent <AntiGravityForce>()); PaladinPlugin.Destroy(lightningSpear.GetComponent <ProjectileProximityBeamController>()); #endregion #region SwordBeam swordBeamProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/FMJ"), "PaladinSwordBeam", true); swordBeamProjectile.transform.localScale = new Vector3(6, 3, 2); //GameObject beamGhost = Assets.swordBeam.InstantiateClone("SwordBeamGhost", false); //beamGhost.AddComponent<ProjectileGhostController>(); //swordBeam.GetComponent<ProjectileController>().ghostPrefab = Assets.swordBeamGhost; GameObject MercEvisProjectileGhost = Resources.Load <GameObject>("Prefabs/Projectiles/EvisProjectile").GetComponent <ProjectileController>().ghostPrefab; swordBeamProjectile.GetComponent <ProjectileController>().ghostPrefab = MercEvisProjectileGhost; swordBeamProjectile.GetComponent <ProjectileDamage>().damageType = DamageType.Generic; PaladinPlugin.Destroy(swordBeamProjectile.transform.Find("SweetSpotBehavior").gameObject); //run this in case moffein's phase round lightning is installed if (swordBeamProjectile.GetComponent <ProjectileProximityBeamController>()) { PaladinPlugin.Destroy(swordBeamProjectile.GetComponent <ProjectileProximityBeamController>()); } swordBeamProjectile.AddComponent <DestroyOnTimer>().duration = 0.3f; #endregion #region Replenish heal = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinHeal", true); heal.transform.localScale = Vector3.one; PaladinMod.PaladinPlugin.Destroy(heal.GetComponent <ProjectileDotZone>()); heal.AddComponent <DestroyOnTimer>().duration = 5f; Misc.PaladinHealController healController = heal.AddComponent <Misc.PaladinHealController>(); healController.radius = StaticValues.healRadius; healController.healAmount = StaticValues.healAmount; healController.barrierAmount = StaticValues.healBarrier; PaladinMod.PaladinPlugin.Destroy(heal.transform.GetChild(0).gameObject); GameObject healFX = Assets.healEffectPrefab.InstantiateClone("HealEffect", false); healFX.transform.parent = heal.transform; healFX.transform.localPosition = Vector3.zero; healFX.transform.localScale = Vector3.one * StaticValues.healRadius * 2f; #endregion #region SacredSunlight healZone = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinHealZone", true); healZone.transform.localScale = Vector3.one; PaladinMod.PaladinPlugin.Destroy(healZone.GetComponent <ProjectileDotZone>()); healZone.AddComponent <DestroyOnTimer>().duration = StaticValues.healZoneDuration + 2f; Misc.PaladinHealZoneController healZoneController = healZone.AddComponent <Misc.PaladinHealZoneController>(); healZoneController.radius = StaticValues.healZoneRadius; healZoneController.interval = 0.25f; healZoneController.rangeIndicator = null; healZoneController.buffDuration = 0f; healZoneController.floorWard = false; healZoneController.expires = true; healZoneController.invertTeamFilter = false; healZoneController.expireDuration = StaticValues.healZoneDuration; healZoneController.animateRadius = false; healZoneController.healAmount = StaticValues.healZoneAmount; healZoneController.barrierAmount = StaticValues.healZoneBarrier; healZoneController.freezeProjectiles = false; PaladinMod.PaladinPlugin.Destroy(healZone.transform.GetChild(0).gameObject); GameObject healZoneFX = Assets.healZoneEffectPrefab.InstantiateClone("HealZoneEffect", false); healZoneFX.transform.parent = healZone.transform; healZoneFX.transform.localPosition = Vector3.zero; InitSpellEffect(healZoneFX, StaticValues.healZoneRadius, StaticValues.healZoneDuration); #endregion #region ScepterSacredSunlight scepterHealZone = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinScepterHealZone", true); scepterHealZone.transform.localScale = Vector3.one; PaladinMod.PaladinPlugin.Destroy(scepterHealZone.GetComponent <ProjectileDotZone>()); scepterHealZone.AddComponent <DestroyOnTimer>().duration = StaticValues.scepterHealZoneDuration + 2f; Misc.PaladinHealZoneController scepterHealZoneController = scepterHealZone.AddComponent <Misc.PaladinHealZoneController>(); scepterHealZoneController.radius = StaticValues.scepterHealZoneRadius; scepterHealZoneController.interval = 0.25f; scepterHealZoneController.rangeIndicator = null; scepterHealZoneController.buffDuration = 0f; scepterHealZoneController.floorWard = false; scepterHealZoneController.expires = true; scepterHealZoneController.invertTeamFilter = false; scepterHealZoneController.expireDuration = StaticValues.scepterHealZoneDuration; scepterHealZoneController.animateRadius = false; scepterHealZoneController.healAmount = StaticValues.scepterHealZoneAmount; scepterHealZoneController.barrierAmount = StaticValues.scepterHealZoneBarrier; scepterHealZoneController.freezeProjectiles = false; scepterHealZoneController.cleanseDebuffs = true; PaladinMod.PaladinPlugin.Destroy(scepterHealZone.transform.GetChild(0).gameObject); GameObject scepterHealZoneFX = Assets.healZoneEffectPrefab.InstantiateClone("ScepterHealZoneEffect", false); scepterHealZoneFX.transform.parent = scepterHealZone.transform; scepterHealZoneFX.transform.localPosition = Vector3.zero; InitSpellEffect(scepterHealZoneFX, StaticValues.scepterHealZoneRadius, StaticValues.scepterHealZoneDuration); #endregion #region VowOfSilence torpor = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinTorpor", true); torpor.transform.localScale = Vector3.one; PaladinMod.PaladinPlugin.Destroy(torpor.GetComponent <ProjectileDotZone>()); torpor.AddComponent <DestroyOnTimer>().duration = StaticValues.torporDuration + 2f; Misc.PaladinHealZoneController torporController = torpor.AddComponent <Misc.PaladinHealZoneController>(); torporController.radius = StaticValues.torporRadius; torporController.interval = 1f; torporController.rangeIndicator = null; torporController.buffDef = Buffs.torporDebuff; torporController.buffDuration = 1f; torporController.floorWard = false; torporController.expires = true; torporController.invertTeamFilter = true; torporController.expireDuration = StaticValues.torporDuration; torporController.animateRadius = false; torporController.healAmount = 0f; torporController.freezeProjectiles = false; torporController.grounding = true; PaladinMod.PaladinPlugin.Destroy(torpor.transform.GetChild(0).gameObject); GameObject torporFX = Assets.torporEffectPrefab.InstantiateClone("TorporEffect", false); torporFX.transform.parent = torpor.transform; torporFX.transform.localPosition = Vector3.zero; InitSpellEffect(torporFX, StaticValues.torporRadius, StaticValues.torporDuration); #endregion #region ScepterVowOfSilence scepterTorpor = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinScepterTorpor", true); scepterTorpor.transform.localScale = Vector3.one; PaladinMod.PaladinPlugin.Destroy(scepterTorpor.GetComponent <ProjectileDotZone>()); scepterTorpor.AddComponent <DestroyOnTimer>().duration = StaticValues.scepterTorporDuration + 2f; Misc.PaladinHealZoneController scepterTorporController = scepterTorpor.AddComponent <Misc.PaladinHealZoneController>(); scepterTorporController.radius = StaticValues.scepterTorporRadius; scepterTorporController.interval = 1f; scepterTorporController.rangeIndicator = null; scepterTorporController.buffDef = Buffs.scepterTorporDebuff; scepterTorporController.buffDuration = 1f; scepterTorporController.floorWard = false; scepterTorporController.expires = true; scepterTorporController.invertTeamFilter = true; scepterTorporController.expireDuration = StaticValues.scepterTorporDuration; scepterTorporController.animateRadius = false; scepterTorporController.healAmount = 0f; scepterTorporController.freezeProjectiles = true; scepterTorporController.grounding = true; PaladinMod.PaladinPlugin.Destroy(scepterTorpor.transform.GetChild(0).gameObject); GameObject scepterTorporFX = Assets.torporEffectPrefab.InstantiateClone("ScepterTorporEffect", false); scepterTorporFX.transform.parent = scepterTorpor.transform; scepterTorporFX.transform.localPosition = Vector3.zero; InitSpellEffect(scepterTorporFX, StaticValues.scepterTorporRadius, StaticValues.scepterTorporDuration); #endregion #region SacredOath warcry = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinWarcry", true); warcry.transform.localScale = Vector3.one; PaladinMod.PaladinPlugin.Destroy(warcry.GetComponent <ProjectileDotZone>()); warcry.AddComponent <DestroyOnTimer>().duration = StaticValues.warcryDuration + 2f; BuffWard warcryController = warcry.AddComponent <BuffWard>(); warcryController.radius = StaticValues.warcryRadius; warcryController.interval = 0.25f; warcryController.rangeIndicator = null; warcryController.buffDef = Buffs.warcryBuff; warcryController.buffDuration = 2f; warcryController.floorWard = false; warcryController.expires = true; warcryController.invertTeamFilter = false; warcryController.expireDuration = StaticValues.warcryDuration; warcryController.animateRadius = false; PaladinMod.PaladinPlugin.Destroy(warcry.transform.GetChild(0).gameObject); GameObject warcryFX = Assets.warcryEffectPrefab.InstantiateClone("WarcryEffect", false); warcryFX.transform.parent = warcry.transform; warcryFX.transform.localPosition = Vector3.zero; InitSpellEffect(warcryFX, StaticValues.warcryRadius, StaticValues.warcryDuration); #endregion #region ScepterSacredOath scepterWarcry = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinScepterWarcry", true); scepterWarcry.transform.localScale = Vector3.one; PaladinMod.PaladinPlugin.Destroy(scepterWarcry.GetComponent <ProjectileDotZone>()); scepterWarcry.AddComponent <DestroyOnTimer>().duration = StaticValues.scepterWarcryDuration + 2f; BuffWard scepterWarcryController = scepterWarcry.AddComponent <BuffWard>(); scepterWarcryController.radius = StaticValues.scepterWarcryRadius; scepterWarcryController.interval = 0.25f; scepterWarcryController.rangeIndicator = null; scepterWarcryController.buffDef = Buffs.scepterWarcryBuff; scepterWarcryController.buffDuration = 1f; scepterWarcryController.floorWard = false; scepterWarcryController.expires = true; scepterWarcryController.invertTeamFilter = false; scepterWarcryController.expireDuration = StaticValues.scepterWarcryDuration; scepterWarcryController.animateRadius = false; PaladinMod.PaladinPlugin.Destroy(scepterWarcry.transform.GetChild(0).gameObject); GameObject scepterWarcryFX = Assets.warcryEffectPrefab.InstantiateClone("ScepterWarcryEffect", false); scepterWarcryFX.transform.parent = scepterWarcry.transform; scepterWarcryFX.transform.localPosition = Vector3.zero; InitSpellEffect(scepterWarcryFX, StaticValues.scepterWarcryRadius, StaticValues.scepterWarcryDuration); #endregion Modules.Prefabs.projectilePrefabs = new List <GameObject> { swordBeamProjectile, shockwave, lightningSpear, lunarShard, heal, healZone, scepterHealZone, torpor, scepterTorpor, warcry, scepterWarcry }; }
public static void RegisterProjectiles() { cleaverProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/EngiGrenadeProjectile"), "CleaverProjectile"); milkjarProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectile"), "MilkjarProjectile"); baseballProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/EngiGrenadeProjectile"), "BaseballProjectile"); ornamentProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/EngiGrenadeProjectile"), "OrnamentProjectile"); milkSplashWard = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "MilkSplashZone"); cleaverProjectile.GetComponent <ProjectileController>().procCoefficient = 1f; cleaverProjectile.GetComponent <ProjectileDamage>().damage = 1f; cleaverProjectile.GetComponent <ProjectileDamage>().damageType = DamageType.BleedOnHit; var projectileImpactExplosion = cleaverProjectile.GetComponent <ProjectileImpactExplosion>(); projectileImpactExplosion.destroyOnWorld = true; projectileImpactExplosion.blastRadius = 0f; projectileImpactExplosion.timerAfterImpact = false; projectileImpactExplosion.lifetimeAfterImpact = 0f; Object.Destroy(cleaverProjectile.GetComponent <ApplyTorqueOnStart>()); //cleaverProjectile.GetComponent<ProjectileSimple>().velocity = 10; //doesnt work? projectileImpactExplosion = milkjarProjectile.GetComponent <ProjectileImpactExplosion>(); projectileImpactExplosion.fireChildren = true; projectileImpactExplosion.childrenProjectilePrefab = milkSplashWard; projectileImpactExplosion.childrenCount = 1; BuffWard buffWard = milkSplashWard.GetComponent <BuffWard>(); buffWard.animateRadius = false; buffWard.buffDuration = 0.5f; buffWard.buffType = Buffs.milkedDebuff; buffWard.expireDuration = 0.6f; buffWard.invertTeamFilter = true; buffWard.radius = 5f; var newWard = milkSplashWard.AddComponent <ExtinguishZonePrefabAlt>(); newWard.animateRadius = false; newWard.radius = 5f; baseballProjectile.AddComponent <BaseballController>(); var projectileSimple = baseballProjectile.GetComponent <ProjectileSimple>(); projectileSimple.velocity = 90; //50 Object.Destroy(baseballProjectile.GetComponent <ProjectileImpactExplosion>()); var projectileDamage = baseballProjectile.GetComponent <ProjectileDamage>(); projectileDamage.damage = 1f; ProjectileCatalog.getAdditionalEntries += list => { list.Add(cleaverProjectile); list.Add(milkjarProjectile); list.Add(baseballProjectile); list.Add(ornamentProjectile); list.Add(milkSplashWard); }; RegProj(cleaverProjectile); RegProj(milkjarProjectile); RegProj(baseballProjectile); RegProj(ornamentProjectile); RegProj(milkSplashWard); }