Esempio n. 1
0
        private static GameObject CreateModel(GameObject main, string modelName)
        {
            PaladinPlugin.DestroyImmediate(main.transform.Find("ModelBase").gameObject);
            PaladinPlugin.DestroyImmediate(main.transform.Find("CameraPivot").gameObject);
            PaladinPlugin.DestroyImmediate(main.transform.Find("AimOrigin").gameObject);

            return(Modules.Assets.mainAssetBundle.LoadAsset <GameObject>(modelName));
        }
Esempio n. 2
0
        public static void SetupSkills(GameObject bodyPrefab)
        {
            foreach (GenericSkill obj in bodyPrefab.GetComponentsInChildren <GenericSkill>())
            {
                PaladinPlugin.DestroyImmediate(obj);
            }

            skillLocator = bodyPrefab.GetComponent <SkillLocator>();

            PassiveSetup();
            PrimarySetup(bodyPrefab);
            SecondarySetup(bodyPrefab);
            UtilitySetup(bodyPrefab);
            SpecialSetup(bodyPrefab);
        }
Esempio n. 3
0
        public static void RegisterProjectiles()
        {
            //would like to simplify this all eventually....
            #region SpinningSlashShockwave
            shockwave = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/BrotherSunderWave"), "PaladinShockwave", true);
            shockwave.transform.GetChild(0).transform.localScale = new Vector3(10, 1.5f, 1);
            shockwave.GetComponent <ProjectileCharacterController>().lifetime = 0.5f;
            shockwave.GetComponent <ProjectileDamage>().damageType            = DamageType.Stun1s;

            GameObject shockwaveGhost = PrefabAPI.InstantiateClone(shockwave.GetComponent <ProjectileController>().ghostPrefab, "PaladinShockwaveGhost", false);
            shockwaveGhost.transform.GetChild(0).transform.localScale = new Vector3(10, 1, 1);
            shockwaveGhost.transform.GetChild(1).transform.localScale = new Vector3(10, 1.5f, 1);
            PaladinPlugin.Destroy(shockwaveGhost.transform.GetChild(0).Find("Infection, World").gameObject);
            PaladinPlugin.Destroy(shockwaveGhost.transform.GetChild(0).Find("Water").gameObject);

            //Material shockwaveMat = Resources.Load<GameObject>("Prefabs/Projectiles/LunarWispTrackingBomb").GetComponent<ProjectileController>().ghostPrefab.transform.GetChild(0).GetComponent<ParticleSystemRenderer>().material;
            shockwaveGhost.transform.GetChild(1).GetComponent <MeshRenderer>().material = Modules.Assets.matMeteorIndicator;

            shockwave.GetComponent <ProjectileController>().ghostPrefab = shockwaveGhost;
            #endregion

            #region LunarShard
            lunarShard = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/LunarShardProjectile"), "PaladinLunarShard", true);
            PaladinPlugin.Destroy(lunarShard.GetComponent <ProjectileSteerTowardTarget>());
            lunarShard.GetComponent <ProjectileImpactExplosion>().blastDamageCoefficient = 1f;
            #endregion

            #region SunlightSpear
            lightningSpear = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/MageLightningBombProjectile"), "LightningSpear", true);
            lightningSpear.AddComponent <Misc.ProjectileOverchargeOnImpact>();

            GameObject spearGhost = Assets.lightningSpear.InstantiateClone("LightningSpearGhost", false);
            spearGhost.AddComponent <ProjectileGhostController>();

            //vfx
            foreach (ParticleSystemRenderer i in spearGhost.GetComponentsInChildren <ParticleSystemRenderer>())
            {
                if (i)
                {
                    i.trailMaterial = Modules.Assets.matYellowLightningLong;
                }
            }
            Light light = spearGhost.GetComponentInChildren <Light>();
            light.range     = 16f;
            light.intensity = 32f;
            spearGhost.GetComponentInChildren <TrailRenderer>().material = Modules.Assets.matYellowLightningLong;

            lightningSpear.transform.localScale *= 2f;

            lightningSpear.GetComponent <ProjectileController>().ghostPrefab = spearGhost;
            //lightningSpear.GetComponent<ProjectileOverlapAttack>().impactEffect = Assets.lightningImpactFX;
            lightningSpear.GetComponent <ProjectileDamage>().damageType            = DamageType.Shock5s;
            lightningSpear.GetComponent <ProjectileImpactExplosion>().impactEffect = Assets.altLightningImpactFX;
            lightningSpear.GetComponent <Rigidbody>().useGravity = false;

            PaladinPlugin.Destroy(lightningSpear.GetComponent <AntiGravityForce>());
            PaladinPlugin.Destroy(lightningSpear.GetComponent <ProjectileProximityBeamController>());
            #endregion

            #region SwordBeam
            swordBeamProjectile = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/FMJ"), "PaladinSwordBeam", true);
            swordBeamProjectile.transform.localScale = new Vector3(6, 3, 2);
            //GameObject beamGhost = Assets.swordBeam.InstantiateClone("SwordBeamGhost", false);
            //beamGhost.AddComponent<ProjectileGhostController>();

            //swordBeam.GetComponent<ProjectileController>().ghostPrefab = Assets.swordBeamGhost;

            GameObject MercEvisProjectileGhost = Resources.Load <GameObject>("Prefabs/Projectiles/EvisProjectile").GetComponent <ProjectileController>().ghostPrefab;
            swordBeamProjectile.GetComponent <ProjectileController>().ghostPrefab = MercEvisProjectileGhost;
            swordBeamProjectile.GetComponent <ProjectileDamage>().damageType      = DamageType.Generic;

            PaladinPlugin.Destroy(swordBeamProjectile.transform.Find("SweetSpotBehavior").gameObject);

            //run this in case moffein's phase round lightning is installed
            if (swordBeamProjectile.GetComponent <ProjectileProximityBeamController>())
            {
                PaladinPlugin.Destroy(swordBeamProjectile.GetComponent <ProjectileProximityBeamController>());
            }

            swordBeamProjectile.AddComponent <DestroyOnTimer>().duration = 0.3f;

            #endregion

            #region Replenish
            heal = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinHeal", true);
            heal.transform.localScale = Vector3.one;

            PaladinMod.PaladinPlugin.Destroy(heal.GetComponent <ProjectileDotZone>());

            heal.AddComponent <DestroyOnTimer>().duration = 5f;

            Misc.PaladinHealController healController = heal.AddComponent <Misc.PaladinHealController>();

            healController.radius        = StaticValues.healRadius;
            healController.healAmount    = StaticValues.healAmount;
            healController.barrierAmount = StaticValues.healBarrier;

            PaladinMod.PaladinPlugin.Destroy(heal.transform.GetChild(0).gameObject);
            GameObject healFX = Assets.healEffectPrefab.InstantiateClone("HealEffect", false);
            healFX.transform.parent        = heal.transform;
            healFX.transform.localPosition = Vector3.zero;

            healFX.transform.localScale = Vector3.one * StaticValues.healRadius * 2f;
            #endregion

            #region SacredSunlight
            healZone = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinHealZone", true);
            healZone.transform.localScale = Vector3.one;

            PaladinMod.PaladinPlugin.Destroy(healZone.GetComponent <ProjectileDotZone>());

            healZone.AddComponent <DestroyOnTimer>().duration = StaticValues.healZoneDuration + 2f;

            Misc.PaladinHealZoneController healZoneController = healZone.AddComponent <Misc.PaladinHealZoneController>();

            healZoneController.radius            = StaticValues.healZoneRadius;
            healZoneController.interval          = 0.25f;
            healZoneController.rangeIndicator    = null;
            healZoneController.buffDuration      = 0f;
            healZoneController.floorWard         = false;
            healZoneController.expires           = true;
            healZoneController.invertTeamFilter  = false;
            healZoneController.expireDuration    = StaticValues.healZoneDuration;
            healZoneController.animateRadius     = false;
            healZoneController.healAmount        = StaticValues.healZoneAmount;
            healZoneController.barrierAmount     = StaticValues.healZoneBarrier;
            healZoneController.freezeProjectiles = false;

            PaladinMod.PaladinPlugin.Destroy(healZone.transform.GetChild(0).gameObject);
            GameObject healZoneFX = Assets.healZoneEffectPrefab.InstantiateClone("HealZoneEffect", false);
            healZoneFX.transform.parent        = healZone.transform;
            healZoneFX.transform.localPosition = Vector3.zero;

            InitSpellEffect(healZoneFX, StaticValues.healZoneRadius, StaticValues.healZoneDuration);
            #endregion

            #region ScepterSacredSunlight
            scepterHealZone = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinScepterHealZone", true);
            scepterHealZone.transform.localScale = Vector3.one;

            PaladinMod.PaladinPlugin.Destroy(scepterHealZone.GetComponent <ProjectileDotZone>());

            scepterHealZone.AddComponent <DestroyOnTimer>().duration = StaticValues.scepterHealZoneDuration + 2f;

            Misc.PaladinHealZoneController scepterHealZoneController = scepterHealZone.AddComponent <Misc.PaladinHealZoneController>();

            scepterHealZoneController.radius            = StaticValues.scepterHealZoneRadius;
            scepterHealZoneController.interval          = 0.25f;
            scepterHealZoneController.rangeIndicator    = null;
            scepterHealZoneController.buffDuration      = 0f;
            scepterHealZoneController.floorWard         = false;
            scepterHealZoneController.expires           = true;
            scepterHealZoneController.invertTeamFilter  = false;
            scepterHealZoneController.expireDuration    = StaticValues.scepterHealZoneDuration;
            scepterHealZoneController.animateRadius     = false;
            scepterHealZoneController.healAmount        = StaticValues.scepterHealZoneAmount;
            scepterHealZoneController.barrierAmount     = StaticValues.scepterHealZoneBarrier;
            scepterHealZoneController.freezeProjectiles = false;
            scepterHealZoneController.cleanseDebuffs    = true;

            PaladinMod.PaladinPlugin.Destroy(scepterHealZone.transform.GetChild(0).gameObject);
            GameObject scepterHealZoneFX = Assets.healZoneEffectPrefab.InstantiateClone("ScepterHealZoneEffect", false);
            scepterHealZoneFX.transform.parent        = scepterHealZone.transform;
            scepterHealZoneFX.transform.localPosition = Vector3.zero;

            InitSpellEffect(scepterHealZoneFX, StaticValues.scepterHealZoneRadius, StaticValues.scepterHealZoneDuration);
            #endregion

            #region VowOfSilence
            torpor = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinTorpor", true);
            torpor.transform.localScale = Vector3.one;

            PaladinMod.PaladinPlugin.Destroy(torpor.GetComponent <ProjectileDotZone>());

            torpor.AddComponent <DestroyOnTimer>().duration = StaticValues.torporDuration + 2f;

            Misc.PaladinHealZoneController torporController = torpor.AddComponent <Misc.PaladinHealZoneController>();

            torporController.radius            = StaticValues.torporRadius;
            torporController.interval          = 1f;
            torporController.rangeIndicator    = null;
            torporController.buffDef           = Buffs.torporDebuff;
            torporController.buffDuration      = 1f;
            torporController.floorWard         = false;
            torporController.expires           = true;
            torporController.invertTeamFilter  = true;
            torporController.expireDuration    = StaticValues.torporDuration;
            torporController.animateRadius     = false;
            torporController.healAmount        = 0f;
            torporController.freezeProjectiles = false;
            torporController.grounding         = true;

            PaladinMod.PaladinPlugin.Destroy(torpor.transform.GetChild(0).gameObject);
            GameObject torporFX = Assets.torporEffectPrefab.InstantiateClone("TorporEffect", false);
            torporFX.transform.parent        = torpor.transform;
            torporFX.transform.localPosition = Vector3.zero;

            InitSpellEffect(torporFX, StaticValues.torporRadius, StaticValues.torporDuration);
            #endregion

            #region ScepterVowOfSilence
            scepterTorpor = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinScepterTorpor", true);
            scepterTorpor.transform.localScale = Vector3.one;

            PaladinMod.PaladinPlugin.Destroy(scepterTorpor.GetComponent <ProjectileDotZone>());

            scepterTorpor.AddComponent <DestroyOnTimer>().duration = StaticValues.scepterTorporDuration + 2f;

            Misc.PaladinHealZoneController scepterTorporController = scepterTorpor.AddComponent <Misc.PaladinHealZoneController>();

            scepterTorporController.radius            = StaticValues.scepterTorporRadius;
            scepterTorporController.interval          = 1f;
            scepterTorporController.rangeIndicator    = null;
            scepterTorporController.buffDef           = Buffs.scepterTorporDebuff;
            scepterTorporController.buffDuration      = 1f;
            scepterTorporController.floorWard         = false;
            scepterTorporController.expires           = true;
            scepterTorporController.invertTeamFilter  = true;
            scepterTorporController.expireDuration    = StaticValues.scepterTorporDuration;
            scepterTorporController.animateRadius     = false;
            scepterTorporController.healAmount        = 0f;
            scepterTorporController.freezeProjectiles = true;
            scepterTorporController.grounding         = true;

            PaladinMod.PaladinPlugin.Destroy(scepterTorpor.transform.GetChild(0).gameObject);
            GameObject scepterTorporFX = Assets.torporEffectPrefab.InstantiateClone("ScepterTorporEffect", false);
            scepterTorporFX.transform.parent        = scepterTorpor.transform;
            scepterTorporFX.transform.localPosition = Vector3.zero;

            InitSpellEffect(scepterTorporFX, StaticValues.scepterTorporRadius, StaticValues.scepterTorporDuration);
            #endregion

            #region SacredOath
            warcry = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinWarcry", true);
            warcry.transform.localScale = Vector3.one;

            PaladinMod.PaladinPlugin.Destroy(warcry.GetComponent <ProjectileDotZone>());

            warcry.AddComponent <DestroyOnTimer>().duration = StaticValues.warcryDuration + 2f;

            BuffWard warcryController = warcry.AddComponent <BuffWard>();

            warcryController.radius           = StaticValues.warcryRadius;
            warcryController.interval         = 0.25f;
            warcryController.rangeIndicator   = null;
            warcryController.buffDef          = Buffs.warcryBuff;
            warcryController.buffDuration     = 2f;
            warcryController.floorWard        = false;
            warcryController.expires          = true;
            warcryController.invertTeamFilter = false;
            warcryController.expireDuration   = StaticValues.warcryDuration;
            warcryController.animateRadius    = false;

            PaladinMod.PaladinPlugin.Destroy(warcry.transform.GetChild(0).gameObject);
            GameObject warcryFX = Assets.warcryEffectPrefab.InstantiateClone("WarcryEffect", false);
            warcryFX.transform.parent        = warcry.transform;
            warcryFX.transform.localPosition = Vector3.zero;

            InitSpellEffect(warcryFX, StaticValues.warcryRadius, StaticValues.warcryDuration);
            #endregion

            #region ScepterSacredOath
            scepterWarcry = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Projectiles/SporeGrenadeProjectileDotZone"), "PaladinScepterWarcry", true);
            scepterWarcry.transform.localScale = Vector3.one;

            PaladinMod.PaladinPlugin.Destroy(scepterWarcry.GetComponent <ProjectileDotZone>());

            scepterWarcry.AddComponent <DestroyOnTimer>().duration = StaticValues.scepterWarcryDuration + 2f;

            BuffWard scepterWarcryController = scepterWarcry.AddComponent <BuffWard>();

            scepterWarcryController.radius           = StaticValues.scepterWarcryRadius;
            scepterWarcryController.interval         = 0.25f;
            scepterWarcryController.rangeIndicator   = null;
            scepterWarcryController.buffDef          = Buffs.scepterWarcryBuff;
            scepterWarcryController.buffDuration     = 1f;
            scepterWarcryController.floorWard        = false;
            scepterWarcryController.expires          = true;
            scepterWarcryController.invertTeamFilter = false;
            scepterWarcryController.expireDuration   = StaticValues.scepterWarcryDuration;
            scepterWarcryController.animateRadius    = false;

            PaladinMod.PaladinPlugin.Destroy(scepterWarcry.transform.GetChild(0).gameObject);
            GameObject scepterWarcryFX = Assets.warcryEffectPrefab.InstantiateClone("ScepterWarcryEffect", false);
            scepterWarcryFX.transform.parent        = scepterWarcry.transform;
            scepterWarcryFX.transform.localPosition = Vector3.zero;

            InitSpellEffect(scepterWarcryFX, StaticValues.scepterWarcryRadius, StaticValues.scepterWarcryDuration);
            #endregion

            Modules.Prefabs.projectilePrefabs = new List <GameObject>
            {
                swordBeamProjectile,
                shockwave,
                lightningSpear,
                lunarShard,
                heal,
                healZone,
                scepterHealZone,
                torpor,
                scepterTorpor,
                warcry,
                scepterWarcry
            };
        }
Esempio n. 4
0
        public static void PopulateAssets()
        {
            if (mainAssetBundle == null)
            {
                using (var assetStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PaladinMod.paladin"))
                {
                    mainAssetBundle = AssetBundle.LoadFromStream(assetStream);
                    var provider = new AssetBundleResourcesProvider("@Paladin", mainAssetBundle);
                    ResourcesAPI.AddProvider(provider);
                }
            }

            using (Stream manifestResourceStream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("PaladinMod.PaladinBank.bnk"))
            {
                byte[] array = new byte[manifestResourceStream2.Length];
                manifestResourceStream2.Read(array, 0, array.Length);
                SoundAPI.SoundBanks.Add(array);
            }

            #region Icons
            charPortrait = mainAssetBundle.LoadAsset <Sprite>("texPaladinIcon").texture;

            iconP   = mainAssetBundle.LoadAsset <Sprite>("PassiveIcon");
            icon1   = mainAssetBundle.LoadAsset <Sprite>("SlashIcon");
            icon2   = mainAssetBundle.LoadAsset <Sprite>("SpinSlashIcon");
            icon2b  = mainAssetBundle.LoadAsset <Sprite>("LightningSpearIcon");
            icon2c  = mainAssetBundle.LoadAsset <Sprite>("LunarShardIcon");
            icon3   = mainAssetBundle.LoadAsset <Sprite>("DashIcon");
            icon3b  = mainAssetBundle.LoadAsset <Sprite>("HealIcon");
            icon4   = mainAssetBundle.LoadAsset <Sprite>("HealZoneIcon");
            icon4b  = mainAssetBundle.LoadAsset <Sprite>("TorporIcon");
            icon4c  = mainAssetBundle.LoadAsset <Sprite>("WarcryIcon");
            icon4S  = mainAssetBundle.LoadAsset <Sprite>("ScepterHealZoneIcon");
            icon4bS = mainAssetBundle.LoadAsset <Sprite>("ScepterTorporIcon");
            icon4cS = mainAssetBundle.LoadAsset <Sprite>("ScepterWarcryIcon");
            #endregion

            #region ProjectileGhosts
            lightningSpear = mainAssetBundle.LoadAsset <GameObject>("LightningSpear");
            swordBeam      = mainAssetBundle.LoadAsset <GameObject>("SwordBeam");
            swordBeamGhost = mainAssetBundle.LoadAsset <GameObject>("SwordBeamGhost");
            swordBeamGhost.AddComponent <ProjectileGhostController>();
            tornadoEffect = mainAssetBundle.LoadAsset <GameObject>("PaladinTornadoEffect");
            tornadoEffect.AddComponent <ProjectileGhostController>();
            #endregion

            #region SpellEffects
            healEffectPrefab     = mainAssetBundle.LoadAsset <GameObject>("HealEffect");
            healZoneEffectPrefab = mainAssetBundle.LoadAsset <GameObject>("HealZoneEffect");
            torporEffectPrefab   = mainAssetBundle.LoadAsset <GameObject>("TorporEffect");
            warcryEffectPrefab   = mainAssetBundle.LoadAsset <GameObject>("HealZoneEffect").InstantiateClone("WarcryEffect", false);

            GameObject engiShieldObj = Resources.Load <GameObject>("Prefabs/Projectiles/EngiBubbleShield");

            Material shieldFillMat  = UnityEngine.Object.Instantiate <Material>(engiShieldObj.transform.Find("Collision").Find("ActiveVisual").GetComponent <MeshRenderer>().material);
            Material shieldOuterMat = UnityEngine.Object.Instantiate <Material>(engiShieldObj.transform.Find("Collision").Find("ActiveVisual").Find("Edge").GetComponent <MeshRenderer>().material);

            GameObject voidExplosionObj = Resources.Load <GameObject>("Prefabs/Effects/NullifierDeathExplosion");//DeathExplosion
            Material   voidMat          = voidExplosionObj.transform.Find("AreaIndicator (1)").GetComponent <ParticleSystemRenderer>().material;
            torporMat = voidMat;

            GameObject healNovaObj = Resources.Load <GameObject>("Prefabs/Effects/TPHealNovaEffect");
            Material   healMat     = healNovaObj.transform.Find("AreaIndicator").GetComponent <ParticleSystemRenderer>().material;

            healZoneEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material             = shieldOuterMat;
            healZoneEffectPrefab.transform.GetChild(0).GetChild(0).GetComponent <ParticleSystemRenderer>().material = healMat;

            torporEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material = voidMat;

            warcryEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material = shieldOuterMat;
            warcryEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material.SetColor("_TintColor", Color.red);
            warcryEffectPrefab.transform.GetChild(0).GetChild(0).GetComponent <ParticleSystemRenderer>().material = Resources.Load <Material>("materials/matFullCrit");
            //
            //GameObject warbannerEffect = Resources.Load<GameObject>("Prefabs/NetworkedObjects/WarbannerWard").InstantiateClone("x", true);
            #endregion

            #region SwordEffects
            swordSwing               = Assets.LoadEffect("PaladinSwing", "");
            spinningSlashFX          = Assets.LoadEffect("SpinSlashEffect", "");
            spinningSlashEmpoweredFX = Assets.LoadEffect("EmpSpinSlashEffect", "");
            hitFX = Assets.LoadEffect("ImpactPaladinSwing", "");

            swordSwingGreen               = Assets.LoadEffect("PaladinSwingGreen", "");
            spinningSlashFXGreen          = Assets.LoadEffect("SpinSlashEffectGreen", "");
            spinningSlashEmpoweredFXGreen = Assets.LoadEffect("EmpSpinSlashEffectGreen", "");
            hitFXGreen = Assets.LoadEffect("ImpactPaladinSwingGreen", "");

            swordSwingYellow               = Assets.LoadEffect("PaladinSwingYellow", "");
            spinningSlashFXYellow          = Assets.LoadEffect("SpinSlashEffectYellow", "");
            spinningSlashEmpoweredFXYellow = Assets.LoadEffect("EmpSpinSlashEffectYellow", "");
            hitFXYellow = Assets.LoadEffect("ImpactPaladinSwingYellow", "");

            swordSwingWhite = Assets.LoadEffect("PaladinSwingWhite", "");
            hitFXBlunt      = Assets.LoadEffect("ImpactPaladinSwingBlunt", "");

            swordSwingBat = Assets.LoadEffect("PaladinSwingBat", "");

            swordSwingRed               = Assets.LoadEffect("PaladinSwingRed", "");
            spinningSlashFXRed          = Assets.LoadEffect("SpinSlashEffectRed", "");
            spinningSlashEmpoweredFXRed = Assets.LoadEffect("EmpSpinSlashEffectRed", "");
            hitFXRed = Assets.LoadEffect("ImpactPaladinSwingRed", "");

            swordSwingClay               = Assets.LoadEffect("PaladinSwingClay", "");
            spinningSlashFXClay          = Assets.LoadEffect("SpinSlashEffectClay", "");
            spinningSlashEmpoweredFXClay = Assets.LoadEffect("EmpSpinSlashEffectClay", "");
            hitFXClay = Assets.LoadEffect("ImpactPaladinSwingClay", "");

            swordSwingPurple               = Assets.LoadEffect("PaladinSwingPurple", "");
            spinningSlashFXPurple          = Assets.LoadEffect("SpinSlashEffectPurple", "");
            spinningSlashEmpoweredFXPurple = Assets.LoadEffect("EmpSpinSlashEffectPurple", "");
            hitFXPurple = Assets.LoadEffect("ImpactPaladinSwingPurple", "");

            swordSwingFlame               = Assets.LoadEffect("PaladinSwingFlame", "");
            spinningSlashFXFlame          = Assets.LoadEffect("SpinSlashEffectFlame", "");
            spinningSlashEmpoweredFXFlame = Assets.LoadEffect("EmpSpinSlashEffectFlame", "");

            swordSwingBlack               = Assets.LoadEffect("PaladinSwingBlack", "");
            spinningSlashFXBlack          = Assets.LoadEffect("SpinSlashEffectBlack", "");
            spinningSlashEmpoweredFXBlack = Assets.LoadEffect("EmpSpinSlashEffectBlack", "");
            hitFXBlack = Assets.LoadEffect("ImpactPaladinSwingBlack", "");
            #endregion

            #region MiscEffects
            lightningHitFX    = Assets.LoadEffect("LightningHitFX", "");
            lightningImpactFX = Assets.LoadEffect("LightningImpact", "Play_mage_R_lightningBlast");
            torporVoidFX      = Assets.LoadEffect("TorporVoidFX", "RoR2_nullifier_attack1_explode_02");
            #endregion

            #region Meshes
            defaultMesh      = mainAssetBundle.LoadAsset <Mesh>("meshPaladin");
            defaultSwordMesh = mainAssetBundle.LoadAsset <Mesh>("meshSword");
            lunarMesh        = mainAssetBundle.LoadAsset <Mesh>("meshLunarPaladin");
            lunarSwordMesh   = mainAssetBundle.LoadAsset <Mesh>("meshLunarSword");
            poisonMesh       = mainAssetBundle.LoadAsset <Mesh>("meshNkuhanaPaladin");
            poisonSwordMesh  = mainAssetBundle.LoadAsset <Mesh>("meshNkuhanaSword");
            //hunterMesh = mainAssetBundle.LoadAsset<Mesh>("HunterMesh");
            dripMesh           = mainAssetBundle.LoadAsset <Mesh>("meshDripPaladin");
            batMesh            = mainAssetBundle.LoadAsset <Mesh>("meshBat");
            clayMesh           = mainAssetBundle.LoadAsset <Mesh>("meshClayPaladin");
            claySwordMesh      = mainAssetBundle.LoadAsset <Mesh>("meshClaySword");
            minecraftMesh      = mainAssetBundle.LoadAsset <Mesh>("meshMinecraftPaladin");
            minecraftSwordMesh = mainAssetBundle.LoadAsset <Mesh>("meshMinecraftSword");
            #endregion

            //weird shit to get the lightning effect looking how i want it
            altLightningImpactFX = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Effects/ImpactEffects/LightningStrikeImpact"), "PaladinLightningStrikeImpact", true);

            PaladinPlugin.Destroy(altLightningImpactFX.transform.Find("LightningRibbon").gameObject);

            foreach (ParticleSystemRenderer i in altLightningImpactFX.GetComponentsInChildren <ParticleSystemRenderer>())
            {
                if (i)
                {
                    i.material.SetColor("_TintColor", Color.yellow);
                }
            }

            altLightningImpactFX.AddComponent <NetworkIdentity>();

            EffectAPI.AddEffect(altLightningImpactFX);

            //clone mithrix's dash effect and resize it for my dash
            dashFX = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Effects/BrotherDashEffect"), "PaladinDashEffect", true);
            dashFX.AddComponent <NetworkIdentity>();
            dashFX.transform.localScale *= 0.3f;

            EffectAPI.AddEffect(dashFX);

            InitCustomItems();
        }
Esempio n. 5
0
        public static void PopulateAssets()
        {
            if (mainAssetBundle == null)
            {
                using (var assetStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PaladinMod.paladin"))
                {
                    mainAssetBundle = AssetBundle.LoadFromStream(assetStream);
                }
            }

            using (Stream manifestResourceStream2 = Assembly.GetExecutingAssembly().GetManifestResourceStream("PaladinMod.PaladinBank.bnk"))
            {
                byte[] array = new byte[manifestResourceStream2.Length];
                manifestResourceStream2.Read(array, 0, array.Length);
                SoundAPI.SoundBanks.Add(array);
            }

            GatherMaterials();

            #region Icons
            charPortrait = mainAssetBundle.LoadAsset <Sprite>("texPaladinIcon").texture;

            iconP   = mainAssetBundle.LoadAsset <Sprite>("PassiveIcon");
            icon1   = mainAssetBundle.LoadAsset <Sprite>("SlashIcon");
            icon2   = mainAssetBundle.LoadAsset <Sprite>("SpinSlashIcon");
            icon2b  = mainAssetBundle.LoadAsset <Sprite>("LightningSpearIcon");
            icon2c  = mainAssetBundle.LoadAsset <Sprite>("LunarShardIcon");
            icon3   = mainAssetBundle.LoadAsset <Sprite>("DashIcon");
            icon3b  = mainAssetBundle.LoadAsset <Sprite>("HealIcon");
            icon4   = mainAssetBundle.LoadAsset <Sprite>("HealZoneIcon");
            icon4b  = mainAssetBundle.LoadAsset <Sprite>("TorporIcon");
            icon4c  = mainAssetBundle.LoadAsset <Sprite>("WarcryIcon");
            icon4S  = mainAssetBundle.LoadAsset <Sprite>("ScepterHealZoneIcon");
            icon4bS = mainAssetBundle.LoadAsset <Sprite>("ScepterTorporIcon");
            icon4cS = mainAssetBundle.LoadAsset <Sprite>("ScepterWarcryIcon");
            icon4d  = mainAssetBundle.LoadAsset <Sprite>("CruelSunIcon");
            icon4dS = mainAssetBundle.LoadAsset <Sprite>("ScepterCruelSunIcon");
            #endregion

            #region ProjectileGhosts
            lightningSpear = mainAssetBundle.LoadAsset <GameObject>("LightningSpear");
            swordBeam      = mainAssetBundle.LoadAsset <GameObject>("SwordBeam");
            swordBeamGhost = mainAssetBundle.LoadAsset <GameObject>("SwordBeamGhost");
            swordBeamGhost.AddComponent <ProjectileGhostController>();
            tornadoEffect = mainAssetBundle.LoadAsset <GameObject>("PaladinTornadoEffect");
            tornadoEffect.AddComponent <ProjectileGhostController>();
            #endregion

            #region SpellEffects
            healEffectPrefab     = mainAssetBundle.LoadAsset <GameObject>("HealEffect");
            healZoneEffectPrefab = mainAssetBundle.LoadAsset <GameObject>("HealZoneEffect");
            torporEffectPrefab   = mainAssetBundle.LoadAsset <GameObject>("TorporEffect");
            warcryEffectPrefab   = mainAssetBundle.LoadAsset <GameObject>("HealZoneEffect").InstantiateClone("WarcryEffect", false);

            GameObject engiShieldObj = Resources.Load <GameObject>("Prefabs/Projectiles/EngiBubbleShield");

            Material shieldFillMat  = UnityEngine.Object.Instantiate <Material>(engiShieldObj.transform.Find("Collision").Find("ActiveVisual").GetComponent <MeshRenderer>().material);
            Material shieldOuterMat = UnityEngine.Object.Instantiate <Material>(engiShieldObj.transform.Find("Collision").Find("ActiveVisual").Find("Edge").GetComponent <MeshRenderer>().material);

            GameObject voidExplosionObj = Resources.Load <GameObject>("Prefabs/Effects/NullifierDeathExplosion");//DeathExplosion
            Material   voidMat          = voidExplosionObj.transform.Find("AreaIndicator (1)").GetComponent <ParticleSystemRenderer>().material;
            torporMat = voidMat;

            GameObject healNovaObj = Resources.Load <GameObject>("Prefabs/Effects/TPHealNovaEffect");
            Material   healMat     = healNovaObj.transform.Find("AreaIndicator").GetComponent <ParticleSystemRenderer>().material;

            healEffectPrefab.GetComponentInChildren <ParticleSystemRenderer>().material = healMat;

            healZoneEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material             = shieldOuterMat;
            healZoneEffectPrefab.transform.GetChild(0).GetChild(0).GetComponent <ParticleSystemRenderer>().material = healMat;

            torporEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material = voidMat;

            warcryEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material = shieldOuterMat;
            warcryEffectPrefab.transform.GetChild(0).GetComponent <ParticleSystemRenderer>().material.SetColor("_TintColor", Color.red);
            warcryEffectPrefab.transform.GetChild(0).GetChild(0).GetComponent <ParticleSystemRenderer>().material = Resources.Load <Material>("materials/matFullCrit");
            //
            //GameObject warbannerEffect = Resources.Load<GameObject>("Prefabs/NetworkedObjects/WarbannerWard").InstantiateClone("x", true);
            #endregion

            #region SwordEffects
            swordSwing = Assets.LoadEffect("PaladinSwing", "");
            swordSwing.transform.Find("SwingTrail").Find("SwingTrail2").GetComponent <ParticleSystemRenderer>().material = matDistortion;

            spinningSlashFX          = Assets.LoadEffect("SpinSlashEffect", "");
            spinningSlashEmpoweredFX = Assets.LoadEffect("EmpSpinSlashEffect", "");
            spinningSlashEmpoweredFX.transform.Find("pog").GetComponent <ParticleSystemRenderer>().material = matJellyfishLightning;
            spinningSlashEmpoweredFX.transform.Find("pog").Find("champ").GetComponent <ParticleSystemRenderer>().material      = matJellyfishLightning;
            spinningSlashEmpoweredFX.transform.Find("pog").Find("Distortion").GetComponent <ParticleSystemRenderer>().material = matDistortion;

            hitFX = Assets.LoadEffect("ImpactPaladinSwing", "");

            swordSwingGreen               = Assets.LoadEffect("PaladinSwingGreen", "");
            spinningSlashFXGreen          = Assets.LoadEffect("SpinSlashEffectGreen", "");
            spinningSlashEmpoweredFXGreen = Assets.LoadEffect("EmpSpinSlashEffectGreen", "");
            hitFXGreen = Assets.LoadEffect("ImpactPaladinSwingGreen", "");

            swordSwingYellow               = Assets.LoadEffect("PaladinSwingYellow", "");
            spinningSlashFXYellow          = Assets.LoadEffect("SpinSlashEffectYellow", "");
            spinningSlashEmpoweredFXYellow = Assets.LoadEffect("EmpSpinSlashEffectYellow", "");
            hitFXYellow = Assets.LoadEffect("ImpactPaladinSwingYellow", "");

            swordSwingWhite = Assets.LoadEffect("PaladinSwingWhite", "");
            hitFXBlunt      = Assets.LoadEffect("ImpactPaladinSwingBlunt", "");

            swordSwingBat = Assets.LoadEffect("PaladinSwingBat", "");

            swordSwingRed               = Assets.LoadEffect("PaladinSwingRed", "");
            spinningSlashFXRed          = Assets.LoadEffect("SpinSlashEffectRed", "");
            spinningSlashEmpoweredFXRed = Assets.LoadEffect("EmpSpinSlashEffectRed", "");
            hitFXRed = Assets.LoadEffect("ImpactPaladinSwingRed", "");

            swordSwingClay               = Assets.LoadEffect("PaladinSwingClay", "");
            spinningSlashFXClay          = Assets.LoadEffect("SpinSlashEffectClay", "");
            spinningSlashEmpoweredFXClay = Assets.LoadEffect("EmpSpinSlashEffectClay", "");
            hitFXClay = Assets.LoadEffect("ImpactPaladinSwingClay", "");

            swordSwingPurple               = Assets.LoadEffect("PaladinSwingPurple", "");
            spinningSlashFXPurple          = Assets.LoadEffect("SpinSlashEffectPurple", "");
            spinningSlashEmpoweredFXPurple = Assets.LoadEffect("EmpSpinSlashEffectPurple", "");
            hitFXPurple = Assets.LoadEffect("ImpactPaladinSwingPurple", "");

            swordSwingFlame               = Assets.LoadEffect("PaladinSwingFlame", "");
            spinningSlashFXFlame          = Assets.LoadEffect("SpinSlashEffectFlame", "");
            spinningSlashEmpoweredFXFlame = Assets.LoadEffect("EmpSpinSlashEffectFlame", "");

            swordSwingBlack               = Assets.LoadEffect("PaladinSwingBlack", "");
            spinningSlashFXBlack          = Assets.LoadEffect("SpinSlashEffectBlack", "");
            spinningSlashEmpoweredFXBlack = Assets.LoadEffect("EmpSpinSlashEffectBlack", "");
            hitFXBlack = Assets.LoadEffect("ImpactPaladinSwingBlack", "");
            #endregion

            #region MiscEffects
            lightningHitFX    = Assets.LoadEffect("LightningHitFX", "");
            lightningImpactFX = Assets.LoadEffect("LightningImpact", "Play_mage_R_lightningBlast");
            torporVoidFX      = Assets.LoadEffect("TorporVoidFX", "RoR2_nullifier_attack1_explode_02");
            #endregion

            #region Meshes
            defaultMesh          = mainAssetBundle.LoadAsset <Mesh>("meshPaladin");
            defaultSwordMesh     = mainAssetBundle.LoadAsset <Mesh>("meshSword");
            defaultCapeMesh      = mainAssetBundle.LoadAsset <Mesh>("meshCape");
            lunarMesh            = mainAssetBundle.LoadAsset <Mesh>("meshPaladinLunar");
            lunarSwordMesh       = mainAssetBundle.LoadAsset <Mesh>("meshSwordLunar");
            lunarKnightMesh      = mainAssetBundle.LoadAsset <Mesh>("meshPaladinLunarKnight");
            lunarKnightSwordMesh = mainAssetBundle.LoadAsset <Mesh>("meshLunarKnightMace");
            gmMesh                = mainAssetBundle.LoadAsset <Mesh>("meshPaladinGM");
            gmSwordMesh           = mainAssetBundle.LoadAsset <Mesh>("meshSwordGM");
            gmLegacyMesh          = mainAssetBundle.LoadAsset <Mesh>("meshPaladinGMOld");
            gmLegacySwordMesh     = mainAssetBundle.LoadAsset <Mesh>("meshSwordGMOld");
            gmCapeMesh            = mainAssetBundle.LoadAsset <Mesh>("meshCapeGM");
            poisonMesh            = mainAssetBundle.LoadAsset <Mesh>("meshPaladinNkuhana");
            poisonSwordMesh       = mainAssetBundle.LoadAsset <Mesh>("meshSwordNkuhana");
            poisonLegacyMesh      = mainAssetBundle.LoadAsset <Mesh>("meshPaladinNkuhanaLegacy");
            poisonLegacySwordMesh = mainAssetBundle.LoadAsset <Mesh>("meshSwordNkuhanaLegacy");
            specterMesh           = mainAssetBundle.LoadAsset <Mesh>("meshPaladinSpecter");
            specterSwordMesh      = mainAssetBundle.LoadAsset <Mesh>("meshSwordSpecter");
            //hunterMesh = mainAssetBundle.LoadAsset<Mesh>("HunterMesh");
            dripMesh           = mainAssetBundle.LoadAsset <Mesh>("meshPaladinDrip");
            batMesh            = mainAssetBundle.LoadAsset <Mesh>("meshBat");
            clayMesh           = mainAssetBundle.LoadAsset <Mesh>("meshPaladinClay");
            claySwordMesh      = mainAssetBundle.LoadAsset <Mesh>("meshSwordClay");
            minecraftMesh      = mainAssetBundle.LoadAsset <Mesh>("meshPaladinMinecraft");
            minecraftSwordMesh = mainAssetBundle.LoadAsset <Mesh>("meshSwordMinecraft");
            #endregion

            //capeMat = Skins.CreateMaterial("matPaladinGMOld", 1, Color.white);
            //was this being used anywhere?

            altLightningImpactFX = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Effects/ImpactEffects/LightningStrikeImpact"), "PaladinLightningStrikeImpact", true);
            PaladinPlugin.Destroy(altLightningImpactFX.transform.Find("LightningRibbon").gameObject);
            PaladinPlugin.Destroy(altLightningImpactFX.transform.Find("Ring").gameObject);
            altLightningImpactFX.transform.Find("PostProcess").GetComponent <PostProcessVolume>().sharedProfile = grandParentPP;
            altLightningImpactFX.transform.Find("Sphere").GetComponent <ParticleSystemRenderer>().material      = matLoaderLightningSphere;
            Light light = altLightningImpactFX.GetComponentInChildren <Light>();
            light.intensity = 80f;
            light.color     = Color.yellow;

            altLightningImpactFX.AddComponent <NetworkIdentity>();

            AddEffect(altLightningImpactFX, altLightningImpactFX.GetComponent <EffectComponent>().soundName);

            //clone mithrix's dash effect and resize it for my dash
            dashFX = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/Effects/BrotherDashEffect"), "PaladinDashEffect", true);
            dashFX.AddComponent <NetworkIdentity>();
            dashFX.GetComponent <EffectComponent>().applyScale = true;
            dashFX.transform.localScale *= 0.5f;

            AddEffect(dashFX);

            //InitCustomItems();

            swordHitSoundEventS = CreateNetworkSoundEventDef(Modules.Sounds.HitS);
            swordHitSoundEventM = CreateNetworkSoundEventDef(Modules.Sounds.HitM);
            swordHitSoundEventL = CreateNetworkSoundEventDef(Modules.Sounds.HitL);

            batHitSoundEventS = CreateNetworkSoundEventDef(Modules.Sounds.HitBluntS);
            batHitSoundEventM = CreateNetworkSoundEventDef(Modules.Sounds.HitBluntM);
            batHitSoundEventL = CreateNetworkSoundEventDef(Modules.Sounds.HitBluntL);
        }