コード例 #1
0
        // Token: 0x060022CB RID: 8907 RVA: 0x0009710C File Offset: 0x0009530C
        public void Update()
        {
            TeamIndex teamIndex = this.source ? this.source.teamIndex : TeamIndex.Neutral;
            float     x         = 0f;

            if (this.source && TeamManager.instance)
            {
                x = Mathf.InverseLerp(TeamManager.instance.GetTeamCurrentLevelExperience(teamIndex), TeamManager.instance.GetTeamNextLevelExperience(teamIndex), TeamManager.instance.GetTeamExperience(teamIndex));
            }
            if (this.fillRectTransform)
            {
                Rect rect  = this.rectTransform.rect;
                Rect rect2 = this.fillRectTransform.rect;
                this.fillRectTransform.anchorMin = new Vector2(0f, 0f);
                this.fillRectTransform.anchorMax = new Vector2(x, 1f);
                this.fillRectTransform.sizeDelta = new Vector2(1f, 1f);
            }
        }
コード例 #2
0
        // Token: 0x06002197 RID: 8599 RVA: 0x000913FC File Offset: 0x0008F5FC
        private void PopulateCharacterDataSet(AllyCardManager.CharacterDataSet characterDataSet)
        {
            TeamIndex teamIndex = this.FindTargetTeam();
            ReadOnlyCollection <CharacterMaster> readOnlyInstancesList = CharacterMaster.readOnlyInstancesList;

            for (int i = 0; i < readOnlyInstancesList.Count; i++)
            {
                CharacterMaster characterMaster = readOnlyInstancesList[i];
                if (characterMaster.teamIndex == teamIndex)
                {
                    CharacterBody body = characterMaster.GetBody();
                    if ((!body || !body.teamComponent || !body.teamComponent.hideAllyCardDisplay) && (!characterMaster.playerCharacterMasterController || characterMaster.playerCharacterMasterController.networkUser) && this.currentSource.master != characterMaster)
                    {
                        AllyCardManager.CharacterData characterData = new AllyCardManager.CharacterData(characterMaster);
                        characterDataSet.Add(ref characterData);
                    }
                }
            }
        }
コード例 #3
0
        private void Start()
        {
            if (this.removalTime > 0f)
            {
                this.needsRemovalTime = true;
            }

            RaycastHit raycastHit;

            if (this.floorWard && Physics.Raycast(base.transform.position, Vector3.down, out raycastHit, 500f, LayerIndex.world.mask))
            {
                base.transform.position = raycastHit.point;
                base.transform.up       = raycastHit.normal;
            }

            if (this.rangeIndicator && this.expires)
            {
                ScaleParticleSystemDuration component = this.rangeIndicator.GetComponent <ScaleParticleSystemDuration>();
                if (component)
                {
                    component.newDuration = this.expireDuration;
                }
            }

            if (NetworkServer.active)
            {
                float radiusSqr = this.calculatedRadius * this.calculatedRadius;

                Vector3 position = base.transform.position;
                if (this.invertTeamFilter)
                {
                    for (TeamIndex teamIndex = TeamIndex.Neutral; teamIndex < TeamIndex.Count; teamIndex += 1)
                    {
                        if (teamIndex != this.teamFilter.teamIndex)
                        {
                            this.BuffTeam(TeamComponent.GetTeamMembers(teamIndex), radiusSqr, position);
                        }
                    }
                    return;
                }
                this.BuffTeam(TeamComponent.GetTeamMembers(this.teamFilter.teamIndex), radiusSqr, position);
            }
        }
コード例 #4
0
        public override void Effect(GlobalEventManager globalEventManager, DamageInfo damageInfo, GameObject victim, int itemCount)
        {
            CharacterBody   body              = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   Attacker          = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   characterBody     = victim ? victim.GetComponent <CharacterBody>() : null;
            CharacterMaster master            = Attacker.master;
            Inventory       inventory         = master.inventory;
            TeamComponent   Team              = Attacker.GetComponent <TeamComponent>();
            TeamIndex       attackerTeamIndex = Team ? Team.teamIndex : TeamIndex.Neutral;
            Vector3         aimOrigin         = Attacker.aimOrigin;

            damageInfo.procChainMask.SetProcValue(ProcType.Rings, true);
            GameObject gameObject         = Resources.Load <GameObject>("Prefabs/Projectiles/FireTornado");
            float      resetInterval      = gameObject.GetComponent <ProjectileOverlapAttack>().resetInterval;
            float      lifetime           = gameObject.GetComponent <ProjectileSimple>().lifetime;
            float      damageCoefficient1 = (float)(2.5 + 2.5 * (double)itemCount);
            float      DamageProjectile   = Util.OnHitProcDamage(damageInfo.damage, Attacker.damage, damageCoefficient1) / lifetime * resetInterval;
            float      ProjectileSpeed    = 0.0f;
            Quaternion quaternion         = Quaternion.identity;
            Vector3    forward1           = damageInfo.position - aimOrigin;

            forward1.y = 0.0f;
            if (forward1 != Vector3.zero)
            {
                ProjectileSpeed = -1f;
                quaternion      = Util.QuaternionSafeLookRotation(forward1, Vector3.up);
            }

            ProjectileManager.instance.FireProjectile(new FireProjectileInfo()
            {
                damage           = DamageProjectile,
                crit             = damageInfo.crit,
                damageColorIndex = DamageColorIndex.Item,
                position         = damageInfo.position,
                procChainMask    = damageInfo.procChainMask,
                force            = 0.0f,
                owner            = damageInfo.attacker,
                projectilePrefab = gameObject,
                rotation         = quaternion,
                speedOverride    = ProjectileSpeed,
                target           = null
            });
        }
コード例 #5
0
        // Token: 0x06000E51 RID: 3665 RVA: 0x00046790 File Offset: 0x00044990
        public void SpawnDamageNumber(float amount, Vector3 position, bool crit, TeamIndex teamIndex, DamageColorIndex damageColorIndex)
        {
            Color a     = DamageColor.FindColor(damageColorIndex);
            Color white = Color.white;

            if (teamIndex == TeamIndex.Monster)
            {
                white = new Color(0.5568628f, 0.29411766f, 0.6039216f);
            }
            this.ps.Emit(new ParticleSystem.EmitParams
            {
                position             = position,
                startColor           = a * white,
                applyShapeToPosition = true
            }, 1);
            this.ps.GetCustomParticleData(this.customData, ParticleSystemCustomData.Custom1);
            this.customData[this.customData.Count - 1] = new Vector4(1f, 0f, amount, crit ? 1f : 0f);
            this.ps.SetCustomParticleData(this.customData, ParticleSystemCustomData.Custom1);
        }
コード例 #6
0
        public override void Effect(GlobalEventManager globalEventManager, DamageInfo damageInfo, GameObject victim, int itemCount)
        {
            CharacterBody   body              = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   Attacker          = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   characterBody     = victim ? victim.GetComponent <CharacterBody>() : null;
            CharacterMaster master            = Attacker.master;
            Inventory       inventory         = master.inventory;
            TeamComponent   Team              = Attacker.GetComponent <TeamComponent>();
            TeamIndex       attackerTeamIndex = Team ? Team.teamIndex : TeamIndex.Neutral;
            Vector3         aimOrigin         = Attacker.aimOrigin;



            List <HealthComponent> healthComponentList = new List <HealthComponent>()
            {
                victim.GetComponent <HealthComponent>()
            };
            float damageCoefficient = 1f;
            float num3 = Util.OnHitProcDamage(damageInfo.damage, Attacker.damage, damageCoefficient);

            for (int index = 0; index < 5 + itemCount * 5; ++index)
            {
                BounceOrb bounceOrb = new BounceOrb
                {
                    origin        = damageInfo.position,
                    damageValue   = num3,
                    isCrit        = damageInfo.crit,
                    teamIndex     = attackerTeamIndex,
                    attacker      = damageInfo.attacker,
                    procChainMask = damageInfo.procChainMask
                };
                bounceOrb.procChainMask.AddProc(ProcType.BounceNearby);
                bounceOrb.procCoefficient  = 0.33f;
                bounceOrb.damageColorIndex = DamageColorIndex.Item;
                bounceOrb.bouncedObjects   = healthComponentList;
                HurtBox hurtBox = bounceOrb.PickNextTarget(victim.transform.position, 30f);
                if ((bool)hurtBox)
                {
                    bounceOrb.target = hurtBox;
                    OrbManager.instance.AddOrb(bounceOrb);
                }
            }
        }
コード例 #7
0
        public override bool Effect(EquipmentSlot slot)
        {
            var     ownerBody = slot.GetComponent <CharacterBody>();
            Vector3 pos       = Util.GetCorePosition(ownerBody);

            for (TeamIndex teamIndex = TeamIndex.Neutral; teamIndex < TeamIndex.Count; teamIndex++)
            {
                if (teamIndex != ownerBody.teamComponent.teamIndex)
                {
                    foreach (TeamComponent teamComponent in TeamComponent.GetTeamMembers(teamIndex))
                    {
                        if ((teamComponent.transform.position - pos).sqrMagnitude <= Mathf.Pow(Radius, 2))
                        {
                            CharacterBody component = teamComponent.GetComponent <CharacterBody>();
                            if (component)
                            {
                                var state = component.GetComponent <SetStateOnHurt>();
                                if (state)
                                {
                                    state.SetFrozen(FreezeDuration);
                                }
                            }
                        }
                    }
                }
            }
            GameObject explosionPreFab = UnityEngine.Object.Instantiate(Resources.Load <GameObject>("Prefabs/NetworkedObjects/GenericDelayBlast"), pos, Quaternion.identity);

            explosionPreFab.transform.localScale = new Vector3(Radius, Radius, Radius);
            DelayBlast delayBlast = explosionPreFab.GetComponent <DelayBlast>();

            delayBlast.explosionEffect = Resources.Load <GameObject>("Prefabs/Effects/ImpactEffects/AffixWhiteExplosion");
            delayBlast.delayEffect     = Resources.Load <GameObject>("Prefabs/Effects/AffixWhiteDelayEffect");
            delayBlast.position        = pos;
            delayBlast.baseDamage      = 0;
            delayBlast.baseForce       = 0f;
            delayBlast.radius          = Radius;
            delayBlast.maxTimer        = 0.1f;
            delayBlast.procCoefficient = 0f;

            return(true);
        }
コード例 #8
0
ファイル: Hooks.cs プロジェクト: 6len/game-mods
        private static void RitualDagger_OnKill(On.RoR2.GlobalEventManager.orig_OnCharacterDeath orig, GlobalEventManager gem,
                                                DamageReport damageReport)
        {
            try
            {
                if (damageReport.damageInfo.attacker)
                {
                    Inventory Inv = damageReport.damageInfo.attacker.GetComponent <CharacterBody>().inventory;
                    int       RitualDaggerCount = Inv.GetItemCount(GNCItemSuite.RitualDaggerItemIndex);
                    if (RitualDaggerCount > 0)
                    {
                        CharacterBody component  = damageReport.damageInfo.attacker.GetComponent <CharacterBody>();
                        TeamComponent component2 = component.GetComponent <TeamComponent>();
                        TeamIndex     teamIndex  = component2 ? component2.teamIndex : TeamIndex.Neutral;

                        if (component)
                        {
                            CharacterMaster master = component.master;
                            if (master)
                            {
                                if ((RitualDaggerCount + GNCItemSuiteConfig.RitualDaggerProcChance.Value) >=
                                    UnityEngine.Random.Range(0, 100))
                                {
                                    ProcMissile(RitualDaggerCount, component, master, teamIndex,
                                                damageReport.damageInfo.procChainMask, null, damageReport.damageInfo);
                                    for (var i = 0; i < RitualDaggerCount; i += 2)
                                    {
                                        ProcMissile(RitualDaggerCount, component, master, teamIndex,
                                                    damageReport.damageInfo.procChainMask, null, damageReport.damageInfo);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch
            {
            }

            orig(gem, damageReport);
        }
コード例 #9
0
ファイル: Hellchain.cs プロジェクト: Anreol/TurboEdition
        private bool AddAditionalLinks(CharacterBody cb)
        {
#if DEBUG
            TurboEdition._logger.LogWarning(EquipmentName + ": doing additional links.");
#endif
            TeamIndex ownerTeam = cb.teamComponent.teamIndex;
            for (TeamIndex teamCounter = TeamIndex.Neutral; teamCounter < TeamIndex.Count; teamCounter++)
            {
                if (TeamManager.IsTeamEnemy(ownerTeam, teamCounter))
                {
                    var enemyMember = TeamComponent.GetTeamMembers(teamCounter);
                    if (teamCounter != TeamIndex.Neutral && enemyMember.Count <= 0)
                    {
                        return(false);
                    }                                                                                 //It's gonna be hilarious if some enemies will link to barrels and pots
#if DEBUG
                    TurboEdition._logger.LogWarning(EquipmentName + ": got enemy teams to activator's.");
#endif
                    int link = 0;
                    for (int i = 0; i < enemyMember.Count && link < sphereSearchCount; i++)
                    {
#if DEBUG
                        TurboEdition._logger.LogWarning(EquipmentName + ": doing extra links " + link + 1 + " out of " + sphereSearchCount);
#endif
                        GameObject linkComponent = enemyMember[i].body.GetComponentInChildren <LinkComponent>()?.gameObject;

                        //Check if they are already being linked and generate a sphere search on them to get additional targets
                        if (linkComponent && NetworkServer.active)
                        {
#if DEBUG
                            TurboEdition._logger.LogWarning(EquipmentName + ": server is active and someone in the enemy team has a LinkComponent, generating extra SphereSearch within them.");
#endif
                            GenerateSphereSearch(enemyMember[i].body, true);
                            link++;
                        }
                    }

                    return(true);
                }
            }
            return(false);
        }
コード例 #10
0
        public override void Begin()
        {
            duration = distanceToTarget / 30f;
            EffectData effectData = new EffectData
            {
                origin       = origin,
                genericFloat = duration
            };

            effectData.SetHurtBoxReference(target);
            EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/OrbEffects/DevilOrbEffect"), effectData, true);
            targetBody        = target.healthComponent.body;
            targetTeam        = target.teamIndex;
            targetTeamManager = new TeamManager();
            if (targetBody)
            {
                targetInventory = targetBody.inventory;
                targetHealth    = targetBody.healthComponent;
            }
        }
コード例 #11
0
        // Token: 0x0600162D RID: 5677 RVA: 0x0006A228 File Offset: 0x00068428
        private void OnJoinTeam(TeamIndex newTeamIndex)
        {
            if (TeamComponent.TeamIsValid(newTeamIndex))
            {
                TeamComponent.teamsList[(int)newTeamIndex].Add(this);
            }
            this.SetupIndicator();
            HurtBoxGroup hurtBoxGroup = this.hurtBoxGroup;

            HurtBox[] array = (hurtBoxGroup != null) ? hurtBoxGroup.hurtBoxes : null;
            if (array != null)
            {
                HurtBox[] array2 = array;
                for (int i = 0; i < array2.Length; i++)
                {
                    array2[i].teamIndex = newTeamIndex;
                }
            }
            this.oldTeamIndex = newTeamIndex;
        }
コード例 #12
0
 // Token: 0x06002FD7 RID: 12247 RVA: 0x000CCF68 File Offset: 0x000CB168
 public override void OnEnter()
 {
     base.OnEnter();
     this.highestFallSpeed = 0f;
     if (base.isAuthority)
     {
         if (this.body)
         {
             TeamMask  allButNeutral = TeamMask.allButNeutral;
             TeamIndex objectTeam    = TeamComponent.GetObjectTeam(this.bodyGameObject);
             if (objectTeam != TeamIndex.None)
             {
                 allButNeutral.RemoveTeam(objectTeam);
             }
             BullseyeSearch bullseyeSearch = new BullseyeSearch();
             bullseyeSearch.filterByLoS       = true;
             bullseyeSearch.maxDistanceFilter = 300f;
             bullseyeSearch.maxAngleFilter    = HeadstompersFall.seekCone;
             bullseyeSearch.searchOrigin      = this.body.footPosition;
             bullseyeSearch.searchDirection   = Vector3.down;
             bullseyeSearch.sortMode          = BullseyeSearch.SortMode.Angle;
             bullseyeSearch.teamMaskFilter    = allButNeutral;
             bullseyeSearch.viewer            = this.body;
             bullseyeSearch.RefreshCandidates();
             HurtBox hurtBox = bullseyeSearch.GetResults().FirstOrDefault <HurtBox>();
             this.seekTransform = ((hurtBox != null) ? hurtBox.transform : null);
             GameObject gameObject;
             if (hurtBox == null)
             {
                 gameObject = null;
             }
             else
             {
                 HealthComponent healthComponent = hurtBox.healthComponent;
                 gameObject = ((healthComponent != null) ? healthComponent.gameObject : null);
             }
             this.seekBodyObject = gameObject;
         }
         this.SetOnHitGroundProvider(this.bodyMotor);
     }
 }
コード例 #13
0
        public override void Effect(GlobalEventManager globalEventManager, DamageInfo damageInfo, GameObject victim, int itemCount)
        {
            CharacterBody   body              = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   Attacker          = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   characterBody     = victim ? victim.GetComponent <CharacterBody>() : null;
            CharacterMaster master            = Attacker.master;
            Inventory       inventory         = master.inventory;
            TeamComponent   Team              = Attacker.GetComponent <TeamComponent>();
            TeamIndex       attackerTeamIndex = Team ? Team.teamIndex : TeamIndex.Neutral;
            Vector3         aimOrigin         = Attacker.aimOrigin;

            Vector3    position          = damageInfo.position;
            Vector3    forward           = characterBody.corePosition - position;
            Quaternion rotation          = forward.magnitude != 0.0 ? Util.QuaternionSafeLookRotation(forward) : UnityEngine.Random.rotationUniform;
            float      damageCoefficient = (float)(1.25 + 1.25 * itemCount);
            float      damage            = Util.OnHitProcDamage(damageInfo.damage, Attacker.damage, damageCoefficient);

            #pragma warning disable CS0618 // Obsolete Warning Ignore
            ProjectileManager.instance.FireProjectile(Resources.Load <GameObject>("Prefabs/Projectiles/StickyBomb"), position, rotation, damageInfo.attacker, damage, 100f, damageInfo.crit, DamageColorIndex.Item, (GameObject)null, forward.magnitude * 60f);
            #pragma warning restore CS0618
        }
コード例 #14
0
        public override void Effect(GlobalEventManager globalEventManager, DamageInfo damageInfo, GameObject victim, int itemCount)
        {
            CharacterBody   body              = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   Attacker          = damageInfo.attacker.GetComponent <CharacterBody>();
            CharacterBody   characterBody     = victim ? victim.GetComponent <CharacterBody>() : null;
            CharacterMaster master            = Attacker.master;
            Inventory       inventory         = master.inventory;
            TeamComponent   Team              = Attacker.GetComponent <TeamComponent>();
            TeamIndex       attackerTeamIndex = Team ? Team.teamIndex : TeamIndex.Neutral;
            Vector3         aimOrigin         = Attacker.aimOrigin;


            float        damageCoefficient = 0.8f;
            float        Damage            = Util.OnHitProcDamage(damageInfo.damage, Attacker.damage, damageCoefficient);
            LightningOrb lightningOrb      = new LightningOrb();

            lightningOrb.origin           = damageInfo.position;
            lightningOrb.damageValue      = Damage;
            lightningOrb.isCrit           = damageInfo.crit;
            lightningOrb.bouncesRemaining = 2 * itemCount;
            lightningOrb.teamIndex        = attackerTeamIndex;
            lightningOrb.attacker         = damageInfo.attacker;
            lightningOrb.bouncedObjects   = new List <HealthComponent>()
            {
                victim.GetComponent <HealthComponent>()
            };
            lightningOrb.procChainMask = damageInfo.procChainMask;
            lightningOrb.procChainMask.AddProc(ProcType.ChainLightning);
            lightningOrb.procCoefficient  = 0.2f;
            lightningOrb.lightningType    = LightningOrb.LightningType.Ukulele;
            lightningOrb.damageColorIndex = DamageColorIndex.Item;
            lightningOrb.range           += 2 * itemCount;
            HurtBox hurtBox = lightningOrb.PickNextTarget(damageInfo.position);

            if (hurtBox)
            {
                lightningOrb.target = hurtBox;
                OrbManager.instance.AddOrb(lightningOrb);
            }
        }
コード例 #15
0
        // Token: 0x06002DEA RID: 11754 RVA: 0x000C36CC File Offset: 0x000C18CC
        private void FireSecondaryRaysServer()
        {
            Ray            aimRay         = base.GetAimRay();
            TeamIndex      team           = base.GetTeam();
            BullseyeSearch bullseyeSearch = new BullseyeSearch();

            bullseyeSearch.teamMaskFilter    = TeamMask.AllExcept(team);
            bullseyeSearch.maxAngleFilter    = BigPunch.maxShockFOV * 0.5f;
            bullseyeSearch.maxDistanceFilter = BigPunch.maxShockDistance;
            bullseyeSearch.searchOrigin      = aimRay.origin;
            bullseyeSearch.searchDirection   = this.punchVector;
            bullseyeSearch.sortMode          = BullseyeSearch.SortMode.Distance;
            bullseyeSearch.filterByLoS       = false;
            bullseyeSearch.RefreshCandidates();
            List <HurtBox> list      = bullseyeSearch.GetResults().Where(new Func <HurtBox, bool>(Util.IsValid)).ToList <HurtBox>();
            Transform      transform = base.FindModelChild(this.swingEffectMuzzleString);

            if (transform)
            {
                for (int i = 0; i < Mathf.Min(list.Count, BigPunch.maxShockCount); i++)
                {
                    HurtBox hurtBox = list[i];
                    if (hurtBox)
                    {
                        LightningOrb lightningOrb = new LightningOrb();
                        lightningOrb.bouncedObjects   = new List <HealthComponent>();
                        lightningOrb.attacker         = base.gameObject;
                        lightningOrb.teamIndex        = team;
                        lightningOrb.damageValue      = this.damageStat * BigPunch.shockDamageCoefficient;
                        lightningOrb.isCrit           = base.RollCrit();
                        lightningOrb.origin           = transform.position;
                        lightningOrb.bouncesRemaining = 0;
                        lightningOrb.lightningType    = LightningOrb.LightningType.Loader;
                        lightningOrb.procCoefficient  = BigPunch.shockProcCoefficient;
                        lightningOrb.target           = hurtBox;
                        OrbManager.instance.AddOrb(lightningOrb);
                    }
                }
            }
        }
コード例 #16
0
        // Token: 0x06000E5F RID: 3679 RVA: 0x00046EA4 File Offset: 0x000450A4
        private void OnKilled(DamageInfo damageInfo)
        {
            CharacterBody component = base.GetComponent <CharacterBody>();

            EffectManager.instance.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/CoinEmitter"), new EffectData
            {
                origin       = base.transform.position,
                genericFloat = this.goldReward,
                scale        = (component ? component.radius : 1f)
            }, true);
            if (damageInfo.attacker)
            {
                TeamComponent component2 = base.GetComponent <TeamComponent>();
                CharacterBody component3 = damageInfo.attacker.GetComponent <CharacterBody>();
                if (component3)
                {
                    CharacterMaster master     = component3.master;
                    TeamIndex       objectTeam = TeamComponent.GetObjectTeam(component3.gameObject);
                    TeamManager.instance.GiveTeamMoney(objectTeam, this.goldReward);
                    float num = 1f;
                    if (component2)
                    {
                        num = 1f + (TeamManager.instance.GetTeamLevel(component2.teamIndex) - 1f) * 0.3f;
                    }
                    ExperienceManager.instance.AwardExperience(base.transform.position, component3.GetComponent <CharacterBody>(), (ulong)((uint)(this.expReward * num)));
                }
                if (this.logUnlockableName != "" && Run.instance.selectedDifficulty > DifficultyIndex.Easy && Run.instance.CanUnlockableBeGrantedThisRun(this.logUnlockableName))
                {
                    CharacterBody component4 = base.GetComponent <CharacterBody>();
                    if (Util.CheckRoll((component4 && component4.isChampion) ? 3f : 1f, component3.master))
                    {
                        GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/LogPickup"), base.transform.position, UnityEngine.Random.rotation);
                        gameObject.GetComponentInChildren <UnlockPickup>().unlockableName = this.logUnlockableName;
                        gameObject.GetComponent <TeamFilter>().teamIndex = TeamIndex.Player;
                        NetworkServer.Spawn(gameObject);
                    }
                }
            }
        }
コード例 #17
0
ファイル: Bullet.cs プロジェクト: JMichaelYang/SpacedOut-v.2
    public void Activate(float damage, float duration, float velocity, TeamIndex team, Sprite image)
    {
        this.reset();

        //set bullet stats
        this.Damage   = damage;
        this.duration = duration;
        //set bullet layer
        #region Layer

        switch (team)
        {
        case TeamIndex.ONE:
            this.gameObject.layer = GameSettings.TeamOneBulletLayer;
            break;

        case TeamIndex.TWO:
            this.gameObject.layer = GameSettings.TeamTwoBulletLayer;
            break;

        case TeamIndex.THREE:
            this.gameObject.layer = GameSettings.TeamThreeBulletLayer;
            break;

        case TeamIndex.FOUR:
            this.gameObject.layer = GameSettings.TeamFourBulletLayer;
            break;
        }

        #endregion Layer
        //set bullet image and collider
        this.renderer.sprite = image;
        this.collider.radius = this.renderer.bounds.extents.x < this.renderer.bounds.extents.y ? this.renderer.bounds.extents.x : this.renderer.bounds.extents.y;
        //accelerate bullet
        this.rigidBody.velocity = this.transform.up * velocity;

        //set this bullet up to be destroyed after its duration elapses
        Invoke("Kill", this.duration);
    }
コード例 #18
0
        // Token: 0x06000473 RID: 1139 RVA: 0x00012B80 File Offset: 0x00010D80
        private void HealOccupants(float radius, float healPoints, float healFraction)
        {
            IEnumerable <Collider> source         = Physics.OverlapSphere(base.transform.position, radius, LayerIndex.entityPrecise.mask);
            TeamIndex teamIndex                   = this.teamFilter ? this.teamFilter.teamIndex : TeamIndex.None;
            IEnumerable <HealthComponent> source2 = source.Select(new Func <Collider, HealthComponent>(DroneProjectileHoverHeal.SelectHealthComponent));

            Func <HealthComponent, bool> < > 9__0;
            Func <HealthComponent, bool> predicate;

            if ((predicate = < > 9__0) == null)
            {
                predicate = (< > 9__0 = ((HealthComponent healthComponent) => healthComponent && healthComponent.body.teamComponent.teamIndex == teamIndex));
            }
            foreach (HealthComponent healthComponent2 in source2.Where(predicate).Distinct <HealthComponent>())
            {
                float num = healPoints + healthComponent2.fullHealth * healFraction;
                if (num > 0f)
                {
                    healthComponent2.Heal(num, default(ProcChainMask), true);
                }
            }
        }
コード例 #19
0
 // Token: 0x0600210C RID: 8460 RVA: 0x0009B4FB File Offset: 0x000996FB
 static CombatHealthBarViewer()
 {
     GlobalEventManager.onClientDamageNotified += delegate(DamageDealtMessage msg)
     {
         if (!msg.victim || msg.isSilent)
         {
             return;
         }
         HealthComponent component = msg.victim.GetComponent <HealthComponent>();
         if (!component || component.dontShowHealthbar)
         {
             return;
         }
         TeamIndex objectTeam = TeamComponent.GetObjectTeam(component.gameObject);
         foreach (CombatHealthBarViewer combatHealthBarViewer in CombatHealthBarViewer.instancesList)
         {
             if (msg.attacker == combatHealthBarViewer.viewerBodyObject && combatHealthBarViewer.viewerBodyObject)
             {
                 combatHealthBarViewer.HandleDamage(component, objectTeam);
             }
         }
     };
 }
コード例 #20
0
        // Token: 0x06000D1E RID: 3358 RVA: 0x00040DA8 File Offset: 0x0003EFA8
        private void UpdateForCamera(CameraRigController cameraRigController)
        {
            this.visibility = VisibilityLevel.Visible;
            bool  flag   = false;
            float target = 1f;

            if (this.body)
            {
                if (flag)
                {
                    target = 0f;
                }
                if (this.body.HasBuff(BuffIndex.Cloak))
                {
                    TeamIndex     teamIndex = TeamIndex.Neutral;
                    TeamComponent component = this.body.GetComponent <TeamComponent>();
                    if (component)
                    {
                        teamIndex = component.teamIndex;
                    }
                    this.visibility = ((cameraRigController.targetTeamIndex == teamIndex) ? VisibilityLevel.Revealed : VisibilityLevel.Cloaked);
                }
            }
            this.firstPersonFade = Mathf.MoveTowards(this.firstPersonFade, target, Time.deltaTime / 0.25f);
            this.fade           *= this.firstPersonFade;
            if (this.fade <= 0f || this.invisibilityCount > 0)
            {
                this.visibility = VisibilityLevel.Invisible;
            }
            this.UpdateOverlays();
            if (this.materialsDirty)
            {
                this.UpdateMaterials();
                this.materialsDirty = false;
            }
        }
コード例 #21
0
ファイル: Cheats.cs プロジェクト: VioletChaolan/RoR2-projects
        private static void CCChangeTeam(ConCommandArgs args)
        {
            string teamString   = ArgsHelper.GetValue(args.userArgs, 0);
            string playerString = ArgsHelper.GetValue(args.userArgs, 1);

            NetworkUser player = GetNetUserFromString(playerString);

            player = player ?? args.sender;

            TeamIndex teamIndex = TeamIndex.Player;

            if (Enum.TryParse(teamString, true, out teamIndex))
            {
                if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count)
                {
                    Debug.Log("Changed to team " + teamIndex);
                    if (player.master.GetBody())
                    {
                        player.master.GetBody().teamComponent.teamIndex = teamIndex;
                        player.master.teamIndex = teamIndex;
                    }
                }
            }
        }
コード例 #22
0
        // Token: 0x06000C12 RID: 3090 RVA: 0x0003BE4C File Offset: 0x0003A04C
        private Transform FindTarget()
        {
            TeamIndex teamIndex  = TeamIndex.Monster;
            TeamIndex teamIndex2 = this.teamFilter.teamIndex;

            if (teamIndex2 != TeamIndex.Player)
            {
                if (teamIndex2 == TeamIndex.Monster)
                {
                    teamIndex = TeamIndex.Player;
                }
            }
            else
            {
                teamIndex = TeamIndex.Monster;
            }
            ReadOnlyCollection <TeamComponent> teamMembers = TeamComponent.GetTeamMembers(teamIndex);
            float     num      = 99999f;
            Transform result   = null;
            Vector3   position = this.transform.position;

            for (int i = 0; i < teamMembers.Count; i++)
            {
                Transform transform = teamMembers[i].transform;
                if (!this.pastTargetList.Contains(transform) || (this.canBounceToSameTarget && transform != this.lastTarget))
                {
                    float num2 = Vector3.SqrMagnitude(transform.position - position);
                    if (num2 < num && (!this.smartSeeking || !Physics.Raycast(position, transform.position - position, Mathf.Sqrt(num2), LayerIndex.world.mask)) && num2 <= this.maxChainDistance * this.maxChainDistance)
                    {
                        num    = num2;
                        result = transform;
                    }
                }
            }
            return(result);
        }
コード例 #23
0
ファイル: PVPMode.cs プロジェクト: tung362/RoR2PVP
        static void AnnounceWinningTeam(TeamIndex teamIndex)
        {
            string teamText       = "";
            string resultText     = "But can they keep it up?";
            string conclusionText = "Head towards the teleporter for the next round.";

            switch (teamIndex)
            {
            case TeamIndex.Player:
                teamText = "Team 1";
                break;

            case TeamIndex.Neutral:
                teamText = "Team 2";
                break;

            case TeamIndex.Monster:
                teamText = "Team 3";
                break;

            default:
                teamText       = "No real player";
                resultText     = "It's a draw!";
                conclusionText = "Teleporting...";
                break;
            }

            Chat.SendBroadcastChat(new Chat.SimpleChatMessage
            {
                baseToken = Util.GenerateColoredString(teamText, new Color32(76, byte.MaxValue, 0, byte.MaxValue)) + " has survived... " + resultText
            });
            Chat.SendBroadcastChat(new Chat.SimpleChatMessage
            {
                baseToken = Util.GenerateColoredString(conclusionText, new Color32(0, 255, 255, 255))
            });
        }
コード例 #24
0
        private void AddDot(GameObject attackerObject, float duration, DotController.DotIndex dotIndex, float damageMultiplier)
        {
            if (!NetworkServer.active)
            {
                Debug.LogWarning("[Server] function 'System.Void RoR2.DotController::AddDot(UnityEngine.GameObject,System.Single,RoR2.DotController/DotIndex,System.Single)' called on client");
                return;
            }
            if (dotIndex < DotController.DotIndex.Bleed || dotIndex >= DotController.DotIndex.Count)
            {
                return;
            }
            TeamIndex     teamIndex = TeamIndex.Neutral;
            float         num       = 0f;
            TeamComponent component = attackerObject.GetComponent <TeamComponent>();

            if (component)
            {
                teamIndex = component.teamIndex;
            }
            CharacterBody component2 = attackerObject.GetComponent <CharacterBody>();

            if (component2)
            {
                num = component2.damage;
            }
            DotController.DotDef   dotDef   = DotController.dotDefs[(int)dotIndex];
            DotController.DotStack dotStack = new DotController.DotStack
            {
                dotIndex       = dotIndex,
                dotDef         = dotDef,
                attackerObject = attackerObject,
                attackerTeam   = teamIndex,
                timer          = duration,
                damage         = dotDef.damageCoefficient * num * damageMultiplier,
                damageType     = DamageType.Generic
            };
            switch (dotIndex)
            {
            case DotController.DotIndex.Helfire:
            {
                if (!component2)
                {
                    return;
                }
                HealthComponent healthComponent = component2.healthComponent;
                if (!healthComponent)
                {
                    return;
                }
                dotStack.damage = healthComponent.fullHealth * 0.01f * damageMultiplier;
                if (this.victimObject == attackerObject)
                {
                    dotStack.damageType |= (DamageType.NonLethal | DamageType.Silent);
                }
                else if (this.victimTeam == teamIndex)
                {
                    dotStack.damage *= 0.5f;
                }
                else
                {
                    dotStack.damage *= 24f;
                }
                int i     = 0;
                int count = this.dotStackList.Count;
                while (i < count)
                {
                    if (this.dotStackList[i].dotIndex == DotController.DotIndex.Helfire && this.dotStackList[i].attackerObject == attackerObject)
                    {
                        this.dotStackList[i].timer  = Mathf.Max(this.dotStackList[i].timer, duration);
                        this.dotStackList[i].damage = dotStack.damage;
                        return;
                    }
                    i++;
                }
                if (this.victimBody)
                {
                    EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/HelfireIgniteEffect"), new EffectData
                        {
                            origin = this.victimBody.corePosition
                        }, true);
                }
                break;
            }

            case DotController.DotIndex.PercentBurn:
                dotStack.damage = Mathf.Min(dotStack.damage, this.victimBody.healthComponent.fullCombinedHealth * 0.01f);
                break;

            case DotController.DotIndex.Poison:
            {
                float a = this.victimHealthComponent.fullCombinedHealth / 100f * 1f * dotDef.interval;
                dotStack.damage     = Mathf.Min(Mathf.Max(a, dotStack.damage), dotStack.damage * 50f);
                dotStack.damageType = DamageType.NonLethal;
                int j      = 0;
                int count2 = this.dotStackList.Count;
                while (j < count2)
                {
                    if (this.dotStackList[j].dotIndex == DotController.DotIndex.Poison)
                    {
                        this.dotStackList[j].timer  = Mathf.Max(this.dotStackList[j].timer, duration);
                        this.dotStackList[j].damage = dotStack.damage;
                        return;
                    }
                    j++;
                }
                bool flag = false;
                for (int k = 0; k < this.dotStackList.Count; k++)
                {
                    if (this.dotStackList[k].dotIndex == DotController.DotIndex.Poison)
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag && component2 != null)
                {
                    CharacterMaster master = component2.master;
                    if (master != null)
                    {
                        PlayerStatsComponent playerStatsComponent = master.playerStatsComponent;
                        if (playerStatsComponent != null)
                        {
                            playerStatsComponent.currentStats.PushStatValue(StatDef.totalCrocoInfectionsInflicted, 1UL);
                        }
                    }
                }
                break;
            }
            }
            this.dotStackList.Add(dotStack);
            this.OnDotStackAddedServer(dotStack);
        }
コード例 #25
0
ファイル: Cheats.cs プロジェクト: VioletChaolan/RoR2-projects
        private static void CCSpawnAI(ConCommandArgs args)
        {
            GameObject prefab;
            GameObject body;
            GameObject gameObject = null;

            string prefabString    = ArgsHelper.GetValue(args.userArgs, 0);
            string eliteString     = ArgsHelper.GetValue(args.userArgs, 1);
            string teamString      = ArgsHelper.GetValue(args.userArgs, 2);
            string braindeadString = ArgsHelper.GetValue(args.userArgs, 3);

            string bodyString   = GetBodyMasterLink(prefabString, 0); //prefabString.Replace("Master", "");
            string masterString = GetBodyMasterLink(prefabString, 1); //prefabString.Replace("Body", "");

            prefab = MasterCatalog.FindMasterPrefab(masterString);
            body   = BodyCatalog.FindBodyPrefab(bodyString);
            if (prefab == null)
            {
                List <string> array = new List <string>();
                foreach (var item in MasterCatalog.allMasters)
                {
                    array.Add(item.name);
                }
                string list = string.Join("\n", array);
                Debug.LogFormat("Could not spawn {0}, Try: spawn_ai GolemBody   --- \n{1}", prefabString, list);
                return;
            }

            gameObject = Instantiate <GameObject>(prefab, args.sender.master.GetBody().transform.position, Quaternion.identity);
            CharacterMaster master = gameObject.GetComponent <CharacterMaster>();

            NetworkServer.Spawn(gameObject);
            master.SpawnBody(body, args.sender.master.GetBody().transform.position, Quaternion.identity);

            EliteIndex eliteIndex = EliteIndex.None;

            if (Enum.TryParse <EliteIndex>(eliteString, true, out eliteIndex))
            {
                if ((int)eliteIndex > (int)EliteIndex.None && (int)eliteIndex < (int)EliteIndex.Count)
                {
                    master.inventory.SetEquipmentIndex(EliteCatalog.GetEliteDef(eliteIndex).eliteEquipmentIndex);
                }
            }

            TeamIndex teamIndex = TeamIndex.Neutral;

            if (Enum.TryParse <TeamIndex>(teamString, true, out teamIndex))
            {
                if ((int)teamIndex >= (int)TeamIndex.None && (int)teamIndex < (int)TeamIndex.Count)
                {
                    master.teamIndex = teamIndex;
                }
            }

            bool braindead;

            if (bool.TryParse(braindeadString, out braindead))
            {
                if (braindead)
                {
                    Destroy(master.GetComponent <BaseAI>());
                }
            }
            Debug.Log("Attempting to spawn " + prefabString);
        }
コード例 #26
0
 public static uint GetTeamLevel(TeamIndex team = TeamIndex.Player)
 {
     return(TeamManager.instance?.GetTeamLevel(team) ?? 0);
 }
コード例 #27
0
        // Token: 0x060009BB RID: 2491 RVA: 0x00030CF8 File Offset: 0x0002EEF8
        public static void Write(this NetworkWriter writer, TeamIndex teamIndex)
        {
            byte value = (byte)(teamIndex + 1);

            writer.Write(value);
        }
コード例 #28
0
 // Token: 0x06001450 RID: 5200 RVA: 0x000569B4 File Offset: 0x00054BB4
 public static bool IsTeamEnemy(TeamIndex teamA, TeamIndex teamB)
 {
     return(teamA != teamB);
 }
コード例 #29
0
 // Token: 0x06002BFB RID: 11259 RVA: 0x000B9D18 File Offset: 0x000B7F18
 public HealPulse(Vector3 origin, float finalRadius, float healFractionValue, float duration, TeamIndex teamIndex)
 {
     this.sphereSearch = new SphereSearch
     {
         mask   = LayerIndex.entityPrecise.mask,
         origin = origin,
         queryTriggerInteraction = QueryTriggerInteraction.Collide,
         radius = 0f
     };
     this.finalRadius       = finalRadius;
     this.healFractionValue = healFractionValue;
     this.rate     = 1f / duration;
     this.teamMask = default(TeamMask);
     this.teamMask.AddTeam(teamIndex);
 }
コード例 #30
0
        // Token: 0x06002E87 RID: 11911 RVA: 0x000C5B08 File Offset: 0x000C3D08
        private void FireBeamServer(Ray aimRay, GameObject tracerEffectPrefab, float maxDistance, bool isInitialBeam)
        {
            bool         didHit       = false;
            BulletAttack bulletAttack = new BulletAttack
            {
                origin                  = aimRay.origin,
                aimVector               = aimRay.direction,
                bulletCount             = 1U,
                damage                  = base.GetDamage() * FireMainBeamState.mainBeamDamageCoefficient,
                damageColorIndex        = DamageColorIndex.Item,
                damageType              = DamageType.Generic,
                falloffModel            = BulletAttack.FalloffModel.None,
                force                   = FireMainBeamState.mainBeamForce,
                hitEffectPrefab         = FireMainBeamState.mainBeamImpactEffect,
                HitEffectNormal         = false,
                hitMask                 = LayerIndex.entityPrecise.mask,
                isCrit                  = this.isCrit,
                maxDistance             = maxDistance,
                minSpread               = 0f,
                maxSpread               = 0f,
                muzzleName              = "",
                owner                   = base.ownerBody.gameObject,
                procChainMask           = default(ProcChainMask),
                procCoefficient         = FireMainBeamState.mainBeamProcCoefficient,
                queryTriggerInteraction = QueryTriggerInteraction.UseGlobal,
                radius                  = FireMainBeamState.mainBeamRadius,
                smartCollision          = true,
                sniper                  = false,
                spreadPitchScale        = 1f,
                spreadYawScale          = 1f,
                stopperMask             = LayerIndex.world.mask,
                tracerEffectPrefab      = (isInitialBeam ? tracerEffectPrefab : null),
                weapon                  = base.gameObject
            };
            TeamIndex teamIndex = base.ownerBody.teamComponent.teamIndex;

            bulletAttack.hitCallback = delegate(ref BulletAttack.BulletHit info)
            {
                bool flag = bulletAttack.DefaultHitCallback(ref info);
                if (!isInitialBeam)
                {
                    return(true);
                }
                if (flag)
                {
                    HealthComponent healthComponent = info.hitHurtBox ? info.hitHurtBox.healthComponent : null;
                    if (healthComponent && healthComponent.alive && info.hitHurtBox.teamIndex != teamIndex)
                    {
                        flag = false;
                    }
                }
                if (!flag)
                {
                    didHit = true;
                    this.beamHitPosition = info.point;
                }
                return(flag);
            };
            bulletAttack.Fire();
            if (!didHit)
            {
                RaycastHit raycastHit;
                if (Physics.Raycast(aimRay, out raycastHit, FireMainBeamState.mainBeamMaxDistance, LayerIndex.world.mask, QueryTriggerInteraction.Ignore))
                {
                    didHit = true;
                    this.beamHitPosition = raycastHit.point;
                }
                else
                {
                    this.beamHitPosition = aimRay.GetPoint(FireMainBeamState.mainBeamMaxDistance);
                }
            }
            if (didHit & isInitialBeam)
            {
                FireProjectileInfo fireProjectileInfo = default(FireProjectileInfo);
                fireProjectileInfo.projectilePrefab = FireMainBeamState.secondBombPrefab;
                fireProjectileInfo.owner            = base.ownerBody.gameObject;
                fireProjectileInfo.position         = this.beamHitPosition - aimRay.direction * 0.5f;
                fireProjectileInfo.rotation         = Quaternion.identity;
                fireProjectileInfo.damage           = base.GetDamage() * FireMainBeamState.secondBombDamageCoefficient;
                fireProjectileInfo.damageColorIndex = DamageColorIndex.Item;
                fireProjectileInfo.crit             = this.isCrit;
                ProjectileManager.instance.FireProjectile(fireProjectileInfo);
            }
            if (!isInitialBeam)
            {
                EffectData effectData = new EffectData
                {
                    origin = aimRay.origin,
                    start  = base.transform.position
                };
                effectData.SetNetworkedObjectReference(base.gameObject);
                EffectManager.SpawnEffect(tracerEffectPrefab, effectData, true);
            }
        }