public void CreateProjectile() { 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 <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 SetupBehavior() { base.SetupBehavior(); iscBarrel = (InteractableSpawnCard)Resources.Load <SpawnCard>("SpawnCards/InteractableSpawnCard/iscBarrel1"); iscBarrelNew = UnityEngine.Object.Instantiate(iscBarrel); //remove? BarrelPrefab = iscBarrelNew.prefab; BarrelPrefab = BarrelPrefab.InstantiateClone($"Bulletstorm_Barrel", true); BarrelInteraction barrelInteraction = BarrelPrefab.GetComponent <BarrelInteraction>(); barrelInteraction.expReward = 0; barrelInteraction.goldReward = 0; BarrelDestroyOnInteraction barrelDestroyOnInteraction = BarrelPrefab.AddComponent <BarrelDestroyOnInteraction>(); barrelDestroyOnInteraction.lifetime = Lifetime; barrelDestroyOnInteraction.uselifetime = LifetimeAfterUse; iscBarrelNew.prefab = BarrelPrefab; if (BarrelPrefab) { PrefabAPI.RegisterNetworkPrefab(BarrelPrefab); } //if (HelperPlugin.ClassicItemsCompat.enabled) //HelperPlugin.ClassicItemsCompat.RegisterEmbryo(catalogIndex); }
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); } }
private static void RegProj(GameObject g) { if (g) { PrefabAPI.RegisterNetworkPrefab(g); } }
public override void OnPluginAwake() { base.OnPluginAwake(); inWorldPrefab = PrefabAPI.InstantiateClone(Main.AssetBundle.LoadAsset <GameObject>("Assets/Equipment/Siren Pole/InWorld.prefab"), "MysticsItems_SirenPoleInWorld", false); inWorldPrefab.AddComponent <NetworkIdentity>(); PrefabAPI.RegisterNetworkPrefab(inWorldPrefab); }
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 static GameObject CreateDefaultTextObject() { var textPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/effects/DamageRejected"), "DeathMessageAboveCorpse_DefaultTextObjectChild"); textPrefab.name = "DeathMessageAboveCorpse_DefaultTextObject"; UnityEngine.Object.Destroy(textPrefab.GetComponent <EffectComponent>()); textPrefab.GetComponent <ObjectScaleCurve>().overallCurve = AnimationCurve.Constant(0f, 1f, 1f); UnityEngine.Object.Destroy(textPrefab.GetComponent <VelocityRandomOnStart>()); UnityEngine.Object.Destroy(textPrefab.GetComponent <ConstantForce>()); UnityEngine.Object.Destroy(textPrefab.GetComponent <Rigidbody>()); UnityEngine.Object.Destroy(textPrefab.transform.Find("TextMeshPro").gameObject.GetComponent <ScaleSpriteByCamDistance>()); textPrefab.AddComponent <NetworkIdentity>(); DeathMessageLocator deathMessageLocator = textPrefab.AddComponent <DeathMessageLocator>(); deathMessageLocator.textMeshPro = textPrefab.transform.Find("TextMeshPro").gameObject.GetComponent <TextMeshPro>(); deathMessageLocator.textMeshPro.fontSize = fontSize; deathMessageLocator.languageTextMeshController = textPrefab.transform.Find("TextMeshPro").gameObject.GetComponent <LanguageTextMeshController>(); deathMessageLocator.destroyOnTimer = textPrefab.GetComponent <DestroyOnTimer>(); textPrefab.GetComponent <DestroyOnTimer>().duration = cfgDuration.Value > 0 ? cfgDuration.Value : 360000; PrefabAPI.RegisterNetworkPrefab(textPrefab); defaultTextObject = textPrefab; return(textPrefab); }
public override void OnPluginAwake() { controllerPrefab = PrefabAPI.InstantiateClone(new GameObject(), "DasherDiscController", false); controllerPrefab.AddComponent <NetworkIdentity>().localPlayerAuthority = false; PrefabAPI.RegisterNetworkPrefab(controllerPrefab); NetworkingAPI.RegisterMessageType <DiscBaseState.Ready.SyncFireTrigger>(); }
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); } }
public override void SetupBehavior() { base.SetupBehavior(); PermanentScannerPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/NetworkedObjects/ChestScanner"), "Bulletstorm_ChestScanner", true); ChestRevealer chestRevealer = PermanentScannerPrefab.GetComponent <ChestRevealer>(); chestRevealer.radius = 1000; chestRevealer.pulseTravelSpeed = 1000; chestRevealer.revealDuration = 1; chestRevealer.pulseInterval = 10; chestRevealer.pulseEffectScale = 0; // a scale of zero should make it invisible //chestRevealer.pulseEffectPrefab = null; //throws an error if null if (ScanDuration <= 0) { chestRevealer.revealDuration = 99999; //~27 hours } else { chestRevealer.revealDuration = Mathf.Max(1, ScanDuration); } DestroyOnTimer destroyOnTimer = PermanentScannerPrefab.GetComponent <DestroyOnTimer>(); if (KeepScanningPastStart) { //UnityEngine.Object.Destroy(destroyOnTimer); destroyOnTimer.duration = 99999; } else { destroyOnTimer.duration = ScanDuration; } if (PermanentScannerPrefab) { PrefabAPI.RegisterNetworkPrefab(PermanentScannerPrefab); } if (Compat_ItemStats.enabled) { Compat_ItemStats.CreateItemStatDef(itemDef, ((count, inv, master) => { return(ScanChance + ScanChancePerStack * (count - 1)); }, (value, inv, master) => { return($"Scan Chance: {Pct(value)}"); } )); Compat_ItemStats.CreateItemStatDef(itemDef, ((count, inv, master) => { return(ScanDuration); }, (value, inv, master) => { string text = $"Scan Duration: "; text += ScanDuration == 0 ? $"27:00:00" : $"{GenTimeSpanFromSeconds(value)}"; return(text); } )); } }
public static GameObject CreateTrackerObject() { var trackerObject = new GameObject(); trackerObject.name = "trackingprefab"; trackerObject.AddComponent <NetworkIdentity>(); trackerObject.AddComponent <TrackCorpseClient>(); var prefab = PrefabAPI.InstantiateClone(trackerObject, "DeathMessageAboveCorpse_DefaultTrackerObject"); PrefabAPI.RegisterNetworkPrefab(prefab); return(prefab); }
public override void OnPluginAwake() { riftChest = PrefabAPI.InstantiateClone(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Rift Lens/UnstableRift.prefab"), "MysticsItems_UnstableRift", false); riftChest.AddComponent <NetworkIdentity>(); PrefabAPI.RegisterNetworkPrefab(riftChest); riftPositionIndicator = PrefabAPI.InstantiateClone(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Rift Lens/UnstableRiftPositionIndicator.prefab"), "MysticsItems_UnstableRiftPositionIndicator", false); OnRiftLensCostTypeRegister += (costTypeIndex) => { riftChest.GetComponent <PurchaseInteraction>().costType = costTypeIndex; riftChest.GetComponent <PurchaseInteraction>().cost = 1; }; //add a custom purchase cost type - we will require the interactor pay with the debuff so that players //without the debuff can't help them open chests faster CostTypeDef costTypeDef = new CostTypeDef(); costTypeDef.costStringFormatToken = "COST_MYSTICSITEMS_RIFTLENSDEBUFF_FORMAT"; costTypeDef.isAffordable = delegate(CostTypeDef costTypeDef2, CostTypeDef.IsAffordableContext context) { CharacterBody body = context.activator.gameObject.GetComponent <CharacterBody>(); if (body) { Inventory inventory = body.inventory; return(inventory ? inventory.GetItemCount(MysticsItemsContent.Items.MysticsItems_RiftLensDebuff) > 0 : false); } return(false); }; costTypeDef.payCost = delegate(CostTypeDef costTypeDef2, CostTypeDef.PayCostContext context) { CharacterBody body = context.activator.gameObject.GetComponent <CharacterBody>(); if (body) { Inventory inventory = body.inventory; if (inventory.GetItemCount(MysticsItemsContent.Items.MysticsItems_RiftLensDebuff) > 0) { inventory.RemoveItem(MysticsItemsContent.Items.MysticsItems_RiftLensDebuff); } } }; costTypeDef.colorIndex = ColorCatalog.ColorIndex.LunarItem; CostTypeCreation.CreateCostType(new CostTypeCreation.CustomCostTypeInfo { costTypeDef = costTypeDef, onRegister = OnRiftLensCostTypeRegister }); NetworkingAPI.RegisterMessageType <MysticsItemsRiftChest.SyncDestroyThingsOnOpen>(); NetworkingAPI.RegisterMessageType <MysticsItemsRiftLensBehaviour.SyncCountdown>(); }
private static void CreateGurrenSummonInteractableSpawnCard() { gurrenInteractSpawnCard = ScriptableObject.CreateInstance <InteractableSpawnCard>(); var gurrenInteractPrefab = Modules.Assets.LoadAsset <GameObject>("GurrenInteractPrefab"); gurrenInteractPrefab.AddComponent <NetworkIdentity>(); var childLocator = gurrenInteractPrefab.GetComponent <ChildLocator>(); var model = childLocator.FindChild("Model"); var hologramPivot = childLocator.FindChild("HologramPivot"); var modelLocator = model.gameObject.AddComponent <ModelLocator>(); modelLocator.transform.localScale = new Vector3(0.8f, 0.8f, 0.8f); var entityLocator = model.gameObject.AddComponent <EntityLocator>(); entityLocator.entity = gurrenInteractPrefab; var hightlight = gurrenInteractPrefab.AddComponent <Highlight>(); hightlight.targetRenderer = gurrenInteractPrefab.GetComponentInChildren <Renderer>(); hightlight.highlightColor = Highlight.HighlightColor.interactive; var hologramProjector = gurrenInteractPrefab.AddComponent <HologramProjector>(); hologramProjector.hologramPivot = hologramPivot; gurrenInteractPurchaseInteraction = gurrenInteractPrefab.AddComponent <PurchaseInteraction>(); gurrenInteractPurchaseInteraction.available = true; gurrenInteractPurchaseInteraction.displayNameToken = TTGL_SurvivorPlugin.developerPrefix + "_GURREN_INTERACTABLE_NAME"; gurrenInteractPurchaseInteraction.contextToken = TTGL_SurvivorPlugin.developerPrefix + "_GURREN_INTERACTABLE_CONTEXT"; //var summonMasterBehavior = gurrenInteractPrefab.AddComponent<SummonMasterBehavior>(); //summonMasterBehavior.masterPrefab = CreateGurrenAIMaster(); gurrenInteractPrefab.AddComponent <GurrenSpawnerBehavior>(); gurrenInteractSpawnCard.prefab = gurrenInteractPrefab; gurrenInteractSpawnCard.sendOverNetwork = true; gurrenInteractSpawnCard.hullSize = HullClassification.Golem; gurrenInteractSpawnCard.nodeGraphType = RoR2.Navigation.MapNodeGroup.GraphType.Ground; gurrenInteractSpawnCard.requiredFlags = NodeFlags.None; gurrenInteractSpawnCard.forbiddenFlags = NodeFlags.None; gurrenInteractSpawnCard.directorCreditCost = 15; gurrenInteractSpawnCard.occupyPosition = true; gurrenInteractSpawnCard.eliteRules = SpawnCard.EliteRules.Default; gurrenInteractSpawnCard.orientToFloor = true; gurrenInteractSpawnCard.slightlyRandomizeOrientation = false; gurrenInteractSpawnCard.skipSpawnWhenSacrificeArtifactEnabled = false; if (gurrenInteractPrefab == null) { TTGL_SurvivorPlugin.instance.Logger.LogError("Could not load GurrenInteractPrefab"); } PrefabAPI.RegisterNetworkPrefab(gurrenInteractPrefab); //TTGL_SurvivorPlugin.networkPrefabs.Add(gurrenInteractPrefab); }
//Main method for adding projectiles to the game internal static void RegisterProjectiles() { //Check if config allows skill so we don't load unused projectiles if (Configuration.GetConfigValue <bool>(Configuration.EnableEngiSkills)) { //Register the tesla mine RegisterTeslaMine(); } if (Configuration.GetConfigValue <bool>(Configuration.EnableCaptainSkills)) { //Register the tracking grenade RegisterDebuffNade(); } if (Configuration.GetConfigValue <bool>(Configuration.EnableHuntressSkills)) { //Register the cluster bomblet RegisterArrowBomblet(); } if (Configuration.GetConfigValue <bool>(Configuration.EnableToolbotSkills)) { //Register the nanomachines son RegisterNanoBeacon(); } //If any projectile are queued for loading if (projList.Count > 0) { //Take each proj in the list foreach (GameObject proj in projList) { //And as long as it actually exists if (proj != null) { //Register it to network via prefabapi PrefabAPI.RegisterNetworkPrefab(proj); //Add it to the game via projectileapi AddProjectile(proj); //Tell the console (for debugging) that we registered the projectile EggsUtils.EggsUtils.LogToConsole("Projectile: " + proj.name + " Registered"); } } } //If all projectile skills are disabled also inform console of that else { EggsUtils.EggsUtils.LogToConsole("No projectiles needed to be registered"); } }
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 void CreateCritTextPrefab() { critText = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/effects/BearProc"), "CriticalHitText"); critText.name = "CriticalHitText"; var tmp = critText.transform.Find("TextCamScaler/TextRiser/TextMeshPro").GetComponent <TextMeshPro>(); var ltmc = tmp.gameObject.GetComponent <LanguageTextMeshController>(); ltmc.token = "<color=red>Critical Hit!</color>"; tmp.text = "<color=red>Critical Hit!</color>"; tmp.fontSize = 2f; critText.AddComponent <NetworkIdentity>(); if (critText) { PrefabAPI.RegisterNetworkPrefab(critText); } R2API.EffectAPI.AddEffect(critText); }
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); }
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 void CreateProjectile() { DonutProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/FMJ"), "DonutProjectile", true); var damage = DonutProjectile.GetComponent <RoR2.Projectile.ProjectileDamage>(); damage.damageType = DamageType.BleedOnHit; if (DonutProjectile) { PrefabAPI.RegisterNetworkPrefab(DonutProjectile); } if (DonutProjectile) { PrefabAPI.RegisterNetworkPrefab(DonutProjectile); } RoR2.ProjectileCatalog.getAdditionalEntries += list => { list.Add(DonutProjectile); }; }
public override void SetupBehavior() { base.SetupBehavior(); GameObject sporeGrenadeDotZonePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectileDotZone"); WaterPoolPrefab = sporeGrenadeDotZonePrefab.InstantiateClone("Bulletstorm_WaterPool"); ProjectileDotZone projectileDotZone = WaterPoolPrefab.GetComponent <ProjectileDotZone>(); projectileDotZone.attackerFiltering = AttackerFiltering.Default; projectileDotZone.lifetime = CoolantLeak_Duration; ProjectileDamage projectileDamage = WaterPoolPrefab.GetComponent <ProjectileDamage>(); projectileDamage.damageType = DamageType.Shock5s; projectileDamage.enabled = false; GameObject sporeGrenadePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectile"); WaterPoolPlacerPrefab = sporeGrenadePrefab.InstantiateClone("Bulletstorm_WaterPoolPlacer"); WaterPoolPlacerPrefab.GetComponent <ProjectileDamage>().damageColorIndex = DamageColorIndex.Item; ProjectileImpactExplosion projectileImpactExplosion = WaterPoolPlacerPrefab.GetComponent <ProjectileImpactExplosion>(); projectileImpactExplosion.impactEffect = null; projectileImpactExplosion.childrenProjectilePrefab = WaterPoolPrefab; ProjectileCatalog.getAdditionalEntries += list => list.Add(WaterPoolPlacerPrefab); ProjectileCatalog.getAdditionalEntries += list => list.Add(WaterPoolPrefab); if (WaterPoolPlacerPrefab) { PrefabAPI.RegisterNetworkPrefab(WaterPoolPlacerPrefab); } if (WaterPoolPrefab) { PrefabAPI.RegisterNetworkPrefab(WaterPoolPrefab); } }
public static GameObject CreateTextPrefab(string text, string prefabName, string soundName = "", float fontSize = 1f) { var textPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/effects/BearProc"), prefabName); textPrefab.name = prefabName; UnityEngine.Object.Destroy(textPrefab.transform.Find("Fluff").gameObject); textPrefab.GetComponent <EffectComponent>().soundName = soundName; var tmp = textPrefab.transform.Find("TextCamScaler/TextRiser/TextMeshPro").GetComponent <TextMeshPro>(); var ltmc = tmp.gameObject.GetComponent <LanguageTextMeshController>(); ltmc.token = text; tmp.text = text; tmp.fontSize = fontSize; textPrefab.AddComponent <NetworkIdentity>(); textPrefab.AddComponent <HoverOverHeadSafe>(); if (textPrefab) { PrefabAPI.RegisterNetworkPrefab(textPrefab); } R2API.EffectAPI.AddEffect(textPrefab); return(textPrefab); }
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 OnPluginAwake() { waveProjectile = PrefabAPI.InstantiateClone(new GameObject(), "MysticsItems_MicrophoneSoundwave", false); waveProjectile.AddComponent <NetworkIdentity>().localPlayerAuthority = true; PrefabAPI.RegisterNetworkPrefab(waveProjectile); }
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"); }
private void RegisterCharacter() { // now that the body prefab's set up, clone it here to make the display prefab characterDisplay = PrefabAPI.InstantiateClone(characterPrefab.GetComponent <ModelLocator>().modelBaseTransform.gameObject, "ExampleSurvivorDisplay", true, "C:\\Users\\test\\Documents\\ror2mods\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor.cs", "RegisterCharacter", 153); characterDisplay.AddComponent <NetworkIdentity>(); // clone rex's syringe projectile prefab here to use as our own projectile arrowProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SyringeProjectile"), "Prefabs/Projectiles/ExampleArrowProjectile", true, "C:\\Users\\test\\Documents\\ror2mods\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor.cs", "RegisterCharacter", 155); // just setting the numbers to 1 as the entitystate will take care of those arrowProjectile.GetComponent <ProjectileController>().procCoefficient = 1f; arrowProjectile.GetComponent <ProjectileDamage>().damage = 1f; arrowProjectile.GetComponent <ProjectileDamage>().damageType = DamageType.Generic; // register it for networking if (arrowProjectile) { PrefabAPI.RegisterNetworkPrefab(arrowProjectile); } // add it to the projectile catalog or it won't work in multiplayer ProjectileCatalog.getAdditionalEntries += list => { list.Add(arrowProjectile); }; // write a clean survivor description here! string desc = "Example Survivor something something.<color=#CCD3E0>" + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample text 1." + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample text 2." + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample Text 3." + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample Text 4.</color>" + Environment.NewLine + Environment.NewLine; // add the language tokens LanguageAPI.Add("EXAMPLESURVIVOR_NAME", "Example Survivor"); LanguageAPI.Add("EXAMPLESURVIVOR_DESCRIPTION", desc); LanguageAPI.Add("EXAMPLESURVIVOR_SUBTITLE", "Template for Custom Survivors"); // add our new survivor to the game~ SurvivorDef survivorDef = new SurvivorDef { name = "EXAMPLESURVIVOR_NAME", unlockableName = "", descriptionToken = "EXAMPLESURVIVOR_DESCRIPTION", primaryColor = characterColor, bodyPrefab = characterPrefab, displayPrefab = characterDisplay }; SurvivorAPI.AddSurvivor(survivorDef); // set up the survivor's skills here SkillSetup(); // gotta add it to the body catalog too BodyCatalog.getAdditionalEntries += delegate(List <GameObject> list) { list.Add(characterPrefab); }; }
public override void SetupAttributes() { if (ItemBodyModelPrefab == null) { ItemBodyModelPrefab = Resources.Load <GameObject>(modelResourcePath); displayRules = GenerateItemDisplayRules(); } base.SetupAttributes(); var blasterSwordActiveBuff = new R2API.CustomBuff( new RoR2.BuffDef { buffColor = Color.white, canStack = false, isDebuff = false, name = "ATHRMBlaster Sword Active", iconPath = "@Aetherium:Assets/Textures/Icons/BlasterSwordBuffIcon.png" }); BlasterSwordActiveBuff = R2API.BuffAPI.Add(blasterSwordActiveBuff); //The base of this was provided by Rolo to us. SwordProjectile = useImpaleProjectile ? PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/Thermite"), "SwordProjectile", true) : PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/MageIceBolt"), "SwordProjectile", true); var model = Resources.Load <GameObject>("@Aetherium:Assets/Models/Prefabs/BlasterSwordProjectile.prefab"); model.AddComponent <NetworkIdentity>(); model.AddComponent <RoR2.Projectile.ProjectileGhostController>(); var controller = SwordProjectile.GetComponent <RoR2.Projectile.ProjectileController>(); controller.procCoefficient = 0.5f; controller.ghostPrefab = model; SwordProjectile.GetComponent <RoR2.TeamFilter>().teamIndex = TeamIndex.Player; var damage = SwordProjectile.GetComponent <RoR2.Projectile.ProjectileDamage>(); damage.damageType = DamageType.CrippleOnHit; damage.damage = 0; var impactExplosion = SwordProjectile.GetComponent <RoR2.Projectile.ProjectileImpactExplosion>(); impactExplosion.impactEffect = Resources.Load <GameObject>("Prefabs/Effects/ImpactEffects/VagrantCannonExplosion"); impactExplosion.blastRadius = 2; impactExplosion.blastProcCoefficient = 0.2f; if (useImpaleProjectile) { var stickOnImpact = SwordProjectile.GetComponent <RoR2.Projectile.ProjectileStickOnImpact>(); stickOnImpact.alignNormals = false; impactExplosion.lifetimeAfterImpact = 1.5f; impactExplosion.timerAfterImpact = true; } // register it for networking if (SwordProjectile) { PrefabAPI.RegisterNetworkPrefab(SwordProjectile); } // add it to the projectile catalog or it won't work in multiplayer RoR2.ProjectileCatalog.getAdditionalEntries += list => { list.Add(SwordProjectile); }; }
private void RegisterNetworkedEffects() { //TOOD: Replace with custom effect spawnEffect = Resources.Load <GameObject>("prefabs/effects/CrocoSpawnEffect").InstantiateClone("WispSpawn", true); spawnEffect.AddComponent <NetworkIdentity>(); //fireballProjectile = Assets.MainAssetBundle.LoadAsset<GameObject>("WispFire"); fireballProjectile = Resources.Load <GameObject>("Prefabs/Projectiles/WispCannon").InstantiateClone("WispFireball", true); fireballProjectile.GetComponent <ProjectileController>().ghostPrefab.transform.Find("Particles").Find("FireSphere").transform.localScale = new Vector3(.4f, .4f, .4f); fireballProjectile.GetComponent <ProjectileDamage>().force = 0f; // just setting the numbers to 1 as the entitystate will take care of those fireballProjectile.GetComponent <ProjectileController>().procCoefficient = 1f; fireballProjectile.GetComponent <ProjectileDamage>().damage = 1f; fireballProjectile.GetComponent <ProjectileDamage>().damageType = DamageType.Generic; tetherPrefab = Assets.MainAssetBundle.LoadAsset <GameObject>("Tether"); //burstPrefab = Assets.MainAssetBundle.LoadAsset<GameObject>("SmallExplosionEffect"); burstPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/effects/WilloWispExplosion"), "Prefabs/Projectiles/burstPrefab", true, "C:\\Users\\test\\Documents\\ror2mods\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor.cs", "RegisterCharacter", 155); burstSecondary = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/effects/ShieldBreakEffect"), "Prefabs/Projectiles/burstPrefab", true, "C:\\Users\\test\\Documents\\ror2mods\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor.cs", "RegisterCharacter", 155); //Scale the explosion sizes Vector3 burstPrimaryScale = new Vector3(.75f, .75f, .75f); burstPrefab.transform.Find("Flash").localScale = burstPrimaryScale; burstPrefab.transform.Find("Flames, Tube").localScale = burstPrimaryScale; burstPrefab.transform.Find("Flames, Radial").localScale = burstPrimaryScale; Vector3 burstSecondaryScale = new Vector3(2f, 2f, 2f); burstSecondary.transform.Find("Lightning").localScale = burstSecondaryScale; burstSecondary.transform.Find("Shards").localScale = burstSecondaryScale; burstSecondary.transform.Find("Flash").localScale = burstSecondaryScale; // register it for networking //fireballProjectile.AddComponent<NetworkIdentity>(); if (fireballProjectile) { PrefabAPI.RegisterNetworkPrefab(fireballProjectile); } tetherPrefab.AddComponent <NetworkIdentity>(); if (tetherPrefab) { PrefabAPI.RegisterNetworkPrefab(tetherPrefab); } burstPrefab.AddComponent <NetworkIdentity>(); if (burstPrefab) { PrefabAPI.RegisterNetworkPrefab(burstPrefab); } burstSecondary.AddComponent <NetworkIdentity>(); if (burstSecondary) { PrefabAPI.RegisterNetworkPrefab(burstSecondary); } // add it to the projectile catalog or it won't work in multiplayer ProjectileCatalog.getAdditionalEntries += list => { list.Add(fireballProjectile); }; //Do the same for the effects EffectAPI.AddEffect(spawnEffect); EffectAPI.AddEffect(burstPrefab); EffectAPI.AddEffect(burstSecondary); }
public static void RegisterProjectiles() { // clone rex's syringe projectile prefab here to use as our own projectile arrowProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SyringeProjectile"), "Prefabs/Projectiles/RocketeerRocketProjectile", true, "C:\\Users\\Tinde\\Desktop\\Lurgypai\\ROR2\\mods\\Projects\\files\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\Rocketeer.cs", "RegisterCharacter", 155); // just setting the numbers to 1 as the entitystate will take care of those arrowProjectile.GetComponent <ProjectileController>().procCoefficient = 1.0f; arrowProjectile.GetComponent <ProjectileController>().ghostPrefab = Resources.Load <GameObject>("Prefabs/ProjectileGhosts/MissileGhost"); arrowProjectile.GetComponent <ProjectileDamage>().damage = 0f; arrowProjectile.GetComponent <ProjectileDamage>().damageType = DamageType.Generic; UnityEngine.Object.Destroy(arrowProjectile.GetComponent <ProjectileSingleTargetImpact>()); arrowProjectile.AddComponent <ProjectileImpactExplosion>(); arrowProjectile.GetComponent <ProjectileImpactExplosion>().destroyOnEnemy = true; arrowProjectile.GetComponent <ProjectileImpactExplosion>().destroyOnWorld = true; arrowProjectile.GetComponent <ProjectileImpactExplosion>().blastRadius = 4; arrowProjectile.GetComponent <ProjectileImpactExplosion>().blastDamageCoefficient = 1; arrowProjectile.GetComponent <ProjectileImpactExplosion>().blastProcCoefficient = 1; arrowProjectile.GetComponent <ProjectileImpactExplosion>().impactEffect = Resources.Load <GameObject>("Prefabs/Effects/Impacteffects/ExplosionVFX"); arrowProjectile.GetComponent <ProjectileImpactExplosion>().offsetForLifetimeExpiredSound = 0; arrowProjectile.GetComponent <ProjectileImpactExplosion>().timerAfterImpact = false; arrowProjectile.GetComponent <ProjectileImpactExplosion>().lifetime = 1.0f; arrowProjectile.GetComponent <ProjectileImpactExplosion>().lifetimeAfterImpact = 0; arrowProjectile.GetComponent <ProjectileImpactExplosion>().blastAttackerFiltering = AttackerFiltering.Default; arrowProjectile.GetComponent <ProjectileImpactExplosion>().falloffModel = BlastAttack.FalloffModel.Linear; arrowProjectile.GetComponent <ProjectileImpactExplosion>().bonusBlastForce = new Vector3(0.0f, 0.0f, 0.0f); arrowProjectile.GetComponent <ProjectileImpactExplosion>().fireChildren = false; arrowProjectile.GetComponent <ProjectileImpactExplosion>().childrenCount = 0; arrowProjectile.GetComponent <ProjectileImpactExplosion>().childrenDamageCoefficient = 0; arrowProjectile.GetComponent <ProjectileImpactExplosion>().minAngleOffset = new Vector3(0f, 0f, 0f); arrowProjectile.GetComponent <ProjectileImpactExplosion>().maxAngleOffset = new Vector3(0f, 0f, 0f); arrowProjectile.GetComponent <ProjectileImpactExplosion>().transformSpace = ProjectileImpactExplosion.TransformSpace.World; arrowProjectile.GetComponent <SphereCollider>().radius = 0.5f; specialProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/FireworkProjectile"), "Prefabs/Projectiles/RocketeerRocketProjectile", true, "C:\\Users\\Tinde\\Desktop\\Lurgypai\\ROR2\\mods\\Projects\\files\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\Rocketeer.cs", "RegisterCharacter", 155); specialProjectile.GetComponent <ProjectileController>().procCoefficient = 1.0f; specialProjectile.GetComponent <ProjectileController>().ghostPrefab = Resources.Load <GameObject>("Prefabs/ProjectileGhosts/MicromissileGhost"); specialProjectile.GetComponent <ProjectileDamage>().damage = 0f; specialProjectile.GetComponent <ProjectileDamage>().damageType = DamageType.Generic; UnityEngine.Object.Destroy(specialProjectile.GetComponent <MissileController>()); specialProjectile.GetComponent <ProjectileImpactExplosion>().destroyOnEnemy = true; specialProjectile.GetComponent <ProjectileImpactExplosion>().destroyOnWorld = true; specialProjectile.GetComponent <ProjectileImpactExplosion>().blastRadius = 2; specialProjectile.GetComponent <ProjectileImpactExplosion>().blastDamageCoefficient = 1; specialProjectile.GetComponent <ProjectileImpactExplosion>().blastProcCoefficient = 1; specialProjectile.GetComponent <ProjectileImpactExplosion>().impactEffect = Resources.Load <GameObject>("Prefabs/Effects/Impacteffects/ExplosionVFX"); specialProjectile.GetComponent <ProjectileImpactExplosion>().offsetForLifetimeExpiredSound = 0; specialProjectile.GetComponent <ProjectileImpactExplosion>().timerAfterImpact = false; specialProjectile.GetComponent <ProjectileImpactExplosion>().lifetime = 10; specialProjectile.GetComponent <ProjectileImpactExplosion>().lifetimeAfterImpact = 0; specialProjectile.GetComponent <ProjectileImpactExplosion>().blastAttackerFiltering = AttackerFiltering.Default; specialProjectile.GetComponent <ProjectileImpactExplosion>().bonusBlastForce = new Vector3(0.0f, 0.0f, 0.0f); specialProjectile.GetComponent <ProjectileImpactExplosion>().falloffModel = BlastAttack.FalloffModel.None; specialProjectile.GetComponent <ProjectileImpactExplosion>().fireChildren = false; specialProjectile.GetComponent <ProjectileImpactExplosion>().childrenCount = 0; specialProjectile.GetComponent <ProjectileImpactExplosion>().childrenDamageCoefficient = 0; specialProjectile.GetComponent <ProjectileImpactExplosion>().minAngleOffset = new Vector3(0f, 0f, 0f); specialProjectile.GetComponent <ProjectileImpactExplosion>().maxAngleOffset = new Vector3(0f, 0f, 0f); specialProjectile.GetComponent <ProjectileImpactExplosion>().transformSpace = ProjectileImpactExplosion.TransformSpace.World; specialProjectile.AddComponent <ProjectileSteerTowardTarget>(); specialProjectile.GetComponent <ProjectileSteerTowardTarget>().rotationSpeed = 75; specialProjectile.GetComponent <ProjectileSteerTowardTarget>().yAxisOnly = false; specialProjectile.AddComponent <ProjectileSimple>(); specialProjectile.GetComponent <ProjectileSimple>().updateAfterFiring = true; UnityEngine.Object.Destroy(specialProjectile.GetComponent <BoxCollider>()); specialProjectile.AddComponent <SphereCollider>(); specialProjectile.GetComponent <SphereCollider>().radius = 0.5f; detPack = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/StickyBomb"), "Prefabs/Projectiles/RocketeerDetpack", true, "C:\\Users\\Tinde\\Desktop\\Lurgypai\\ROR2\\mods\\Projects\\files\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\ExampleSurvivor\\Rocketeer.cs", "RegisterCharacter", 155); detPack.GetComponent <ProjectileController>().procCoefficient = 1.0f; detPack.GetComponent <ProjectileController>().ghostPrefab = Resources.Load <GameObject>("Prefabs/ProjectileGhosts/CommandoStickyGrenadeGhost"); detPack.GetComponent <SphereCollider>().radius = 0.5f; // register it for networking if (arrowProjectile) { PrefabAPI.RegisterNetworkPrefab(arrowProjectile); } if (specialProjectile) { PrefabAPI.RegisterNetworkPrefab(specialProjectile); } if (detPack) { PrefabAPI.RegisterNetworkPrefab(detPack); } ContentPacks.projectilePrefabs.Add(arrowProjectile); ContentPacks.projectilePrefabs.Add(specialProjectile); ContentPacks.projectilePrefabs.Add(detPack); }
public override void SetupAttributes() { if (ItemBodyModelPrefab == null) { ItemBodyModelPrefab = Resources.Load <GameObject>(modelResourcePath); displayRules = GenerateItemDisplayRules(); } base.SetupAttributes(); NetworkingAPI.RegisterMessageType <SyncJarOrb>(); NetworkingAPI.RegisterMessageType <SyncJarSucking>(); NetworkingAPI.RegisterMessageType <SyncJarCharging>(); JarChargeSphere = Resources.Load <GameObject>("@Aetherium:Assets/Models/Prefabs/JarOfReshapingAbsorbEffect.prefab"); var chargeSphereEffectComponent = JarChargeSphere.AddComponent <RoR2.EffectComponent>(); chargeSphereEffectComponent.parentToReferencedTransform = true; chargeSphereEffectComponent.positionAtReferencedTransform = true; var chargeSphereTimer = JarChargeSphere.AddComponent <RoR2.DestroyOnTimer>(); chargeSphereTimer.duration = projectileAbsorptionTime; var chargeSphereVfxAttributes = JarChargeSphere.AddComponent <RoR2.VFXAttributes>(); chargeSphereVfxAttributes.vfxIntensity = RoR2.VFXAttributes.VFXIntensity.Low; chargeSphereVfxAttributes.vfxPriority = RoR2.VFXAttributes.VFXPriority.Medium; JarChargeSphere.AddComponent <NetworkIdentity>(); if (JarChargeSphere) { PrefabAPI.RegisterNetworkPrefab(JarChargeSphere); } EffectAPI.AddEffect(JarChargeSphere); //JarOrbProjectile = PrefabAPI.InstantiateClone(Resources.Load<GameObject>()) JarOrb = Resources.Load <GameObject>("@Aetherium:Assets/Models/Prefabs/JarOfReshapingOrb.prefab"); var jarOrbEffectComponent = JarOrb.AddComponent <RoR2.EffectComponent>(); var vfxAttributes = JarOrb.AddComponent <RoR2.VFXAttributes>(); vfxAttributes.vfxIntensity = RoR2.VFXAttributes.VFXIntensity.Low; vfxAttributes.vfxPriority = RoR2.VFXAttributes.VFXPriority.Medium; var orbEffect = JarOrb.AddComponent <OrbEffect>(); orbEffect.startEffect = Resources.Load <GameObject>("Prefabs/Effects/ShieldBreakEffect"); orbEffect.endEffect = Resources.Load <GameObject>("Prefabs/Effects/MuzzleFlashes/MuzzleFlashMageIce"); orbEffect.startVelocity1 = new Vector3(-10, 10, -10); orbEffect.startVelocity2 = new Vector3(10, 13, 10); orbEffect.endVelocity1 = new Vector3(-10, 0, -10); orbEffect.endVelocity2 = new Vector3(10, 5, 10); orbEffect.movementCurve = AnimationCurve.EaseInOut(0, 0, 1, 1); JarOrb.AddComponent <NetworkIdentity>(); if (JarOrb) { PrefabAPI.RegisterNetworkPrefab(JarOrb); } EffectAPI.AddEffect(JarOrb); OrbAPI.AddOrb(typeof(JarOfReshapingOrb)); JarProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/PaladinRocket"), "JarOfReshapingProjectile", true); var model = Resources.Load <GameObject>("@Aetherium:Assets/Models/Prefabs/JarOfReshapingProjectile.prefab"); model.AddComponent <NetworkIdentity>(); model.AddComponent <ProjectileGhostController>(); var controller = JarProjectile.GetComponent <RoR2.Projectile.ProjectileController>(); controller.procCoefficient = 1; controller.ghostPrefab = model; JarProjectile.GetComponent <RoR2.TeamFilter>().teamIndex = TeamIndex.Neutral; var damage = JarProjectile.GetComponent <RoR2.Projectile.ProjectileDamage>(); damage.damageType = DamageType.Generic; damage.damage = 0; var impactExplosion = JarProjectile.GetComponent <RoR2.Projectile.ProjectileImpactExplosion>(); impactExplosion.destroyOnEnemy = true; impactExplosion.destroyOnWorld = true; impactExplosion.impactEffect = Resources.Load <GameObject>("Prefabs/Effects/BrittleDeath"); impactExplosion.blastRadius = 4; impactExplosion.blastProcCoefficient = 1f; // register it for networking if (JarProjectile) { PrefabAPI.RegisterNetworkPrefab(JarProjectile); } // add it to the projectile catalog or it won't work in multiplayer RoR2.ProjectileCatalog.getAdditionalEntries += list => { list.Add(JarProjectile); }; }
private void RegisterCharacter() { // now that the body prefab's set up, clone it here to make the display prefab characterDisplay = PrefabAPI.InstantiateClone(characterPrefab.GetComponent <ModelLocator>().modelBaseTransform.gameObject, "ZukoDisplay", true, "D:\\Ror2Mod\\Zuko-RoR2-Mod\\ZukoProject\\Zuko.cs", "RegisterCharacter", 165); characterDisplay.AddComponent <NetworkIdentity>(); // clone artificers firebolt projectile prefab here to use as our own projectile fireBallProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/MageFirebolt"), "Prefabs/Projectiles/ZukoFireBall", true, "D:\\Ror2Mod\\Zuko-RoR2-Mod\\ZukoProject\\Zuko.cs", "RegisterCharacter", 155); // just setting the numbers to 1 as the entitystate will take care of those fireBallProjectile.GetComponent <ProjectileController>().procCoefficient = 1f; fireBallProjectile.GetComponent <ProjectileDamage>().damage = 1f; fireBallProjectile.GetComponent <ProjectileDamage>().damageType = DamageType.IgniteOnHit; // register it for networking if (fireBallProjectile) { PrefabAPI.RegisterNetworkPrefab(fireBallProjectile); } // add it to the projectile catalog or it won't work in multiplayer ProjectileCatalog.getAdditionalEntries += list => { list.Add(fireBallProjectile); }; // write a clean survivor description here! string desc = "Example Survivor something something.<color=#CCD3E0>" + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample text 1." + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample text 2." + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample Text 3." + Environment.NewLine + Environment.NewLine; desc = desc + "< ! > Sample Text 4.</color>" + Environment.NewLine + Environment.NewLine; // add the language tokens LanguageAPI.Add("ZUKO_NAME", "Zuko"); LanguageAPI.Add("ZUKO_DESCRIPTION", desc); LanguageAPI.Add("ZUKO_SUBTITLE", "Zuko from Avatar: The Last Airbender"); // add our new survivor to the game~ SurvivorDef survivorDef = new SurvivorDef { name = "ZUKO_NAME", unlockableName = "", descriptionToken = "ZUKO_DESCRIPTION", primaryColor = characterColor, bodyPrefab = characterPrefab, displayPrefab = characterDisplay }; SurvivorAPI.AddSurvivor(survivorDef); // set up the survivor's skills here SkillSetup(); // gotta add it to the body catalog too BodyCatalog.getAdditionalEntries += delegate(List <GameObject> list) { list.Add(characterPrefab); }; }