Exemple #1
0
        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);
            };
        }
Exemple #2
0
        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);
     }
 }
Exemple #5
0
 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>();
        }
Exemple #13
0
        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);
        }
Exemple #14
0
 //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");
     }
 }
Exemple #15
0
        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);
        }
Exemple #16
0
        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);
        }
Exemple #18
0
        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);
            }
        }
Exemple #19
0
        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);
            }
        }
Exemple #21
0
        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);
            };
        }
Exemple #23
0
 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");
        }
Exemple #25
0
        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);
            };
        }
Exemple #26
0
        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);
            };
        }
Exemple #27
0
        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);
        }
Exemple #28
0
        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);
            };
        }
Exemple #30
0
        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);
            };
        }