// Token: 0x06000A51 RID: 2641 RVA: 0x0002D158 File Offset: 0x0002B358 private void EvaluateDotStacksForType(DotController.DotIndex dotIndex, float dt, out int remainingActive) { List <DotController.PendingDamage> list = new List <DotController.PendingDamage>(); remainingActive = 0; DotController.DotDef dotDef = this.GetDotDef(dotIndex); for (int i = this.dotStackList.Count - 1; i >= 0; i--) { DotController.DotStack dotStack = this.dotStackList[i]; if (dotStack.dotIndex == dotIndex) { dotStack.timer -= dt; DotController.AddPendingDamageEntry(list, dotStack.attackerObject, dotStack.damage, dotStack.damageType); if (dotStack.timer <= 0f) { this.RemoveDotStackAtServer(i); } else { remainingActive++; } } } if (this.victimObject && this.victimHealthComponent) { Vector3 corePosition = this.victimBody.corePosition; for (int j = 0; j < list.Count; j++) { DamageInfo damageInfo = new DamageInfo(); damageInfo.attacker = list[j].attackerObject; damageInfo.crit = false; damageInfo.damage = list[j].totalDamage; damageInfo.force = Vector3.zero; damageInfo.inflictor = base.gameObject; damageInfo.position = corePosition; damageInfo.procCoefficient = 0f; damageInfo.damageColorIndex = dotDef.damageColorIndex; damageInfo.damageType = list[j].damageType; damageInfo.dotIndex = dotIndex; this.victimHealthComponent.TakeDamage(damageInfo); } } }
// Token: 0x06000C79 RID: 3193 RVA: 0x00038388 File Offset: 0x00036588 private void ServerFixedUpdate() { this.timer -= Time.fixedDeltaTime; if (this.timer <= 0f) { float damageMultiplier = 1f + (float)(this.stack - 1) * 0.5f; this.timer = this.interval; Collider[] array = Physics.OverlapSphere(base.transform.position, this.radius, LayerIndex.entityPrecise.mask, QueryTriggerInteraction.Collide); GameObject[] array2 = new GameObject[array.Length]; int count = 0; for (int i = 0; i < array.Length; i++) { GameObject gameObject = Util.HurtBoxColliderToBody(array[i]).gameObject; if (gameObject && Array.IndexOf <GameObject>(array2, gameObject, 0, count) == -1) { DotController.InflictDot(gameObject, this.networkedBodyAttachment.attachedBodyObject, DotController.DotIndex.Helfire, this.dotDuration, damageMultiplier); array2[count++] = gameObject; } } } }
private void ServerFixedUpdate() { timer -= Time.fixedDeltaTime; if (!(timer <= 0f)) { return; } var damageMultiplier = 1f + (stack - 1) * 0.5f; timer = interval; var array = Physics.OverlapSphere(transform.position, radius, LayerIndex.entityPrecise.mask, QueryTriggerInteraction.Collide); var array2 = new GameObject[array.Length]; var count = 0; var teamIndex = networkedBodyAttachment.attachedBodyObject.GetComponent <TeamComponent>()?.teamIndex ?? TeamIndex.None; foreach (var collider in array) { var otherGameObject = GetGameObjectFromCollider(collider); if (!otherGameObject || Array.IndexOf(array2, otherGameObject, 0, count) != -1) { continue; } var otherTeamIndex = otherGameObject.GetComponent <TeamComponent>()?.teamIndex ?? TeamIndex.None; // Don't affect friendlies if (teamIndex == TeamIndex.Player && otherTeamIndex == TeamIndex.Player) { continue; } DotController.InflictDot(otherGameObject, networkedBodyAttachment.attachedBodyObject, DotController.DotIndex.Helfire, dotDuration, damageMultiplier); array2[count++] = otherGameObject; } }
// Token: 0x06001033 RID: 4147 RVA: 0x00051538 File Offset: 0x0004F738 private void FixedUpdate() { this.radius = this.baseRadius * (1f + (float)(this.stack - 1) * 0.5f); if (NetworkServer.active) { this.timer -= Time.fixedDeltaTime; if (this.timer <= 0f) { float damageMultiplier = 1f + (float)(this.stack - 1) * 0.5f; this.timer = this.interval; this.bullseyeSearch.searchOrigin = base.transform.position; this.bullseyeSearch.maxDistanceFilter = this.radius; this.bullseyeSearch.RefreshCandidates(); foreach (GameObject victimObject in (from hurtBox in this.bullseyeSearch.GetResults() where hurtBox.healthComponent select hurtBox.healthComponent.gameObject).Distinct <GameObject>()) { DotController.InflictDot(victimObject, this.networkedBodyAttachment.attachedBodyObject, DotController.DotIndex.Helfire, this.dotDuration, damageMultiplier); } } } }
// Token: 0x06000A42 RID: 2626 RVA: 0x0002CBEB File Offset: 0x0002ADEB static DotController() { DotController.InitDotCatalog(); }
private bool PerformEquipmentAction(EquipmentIndex equipmentIndex) { if (!NetworkServer.active) { Debug.LogWarning("[Server] function 'System.Boolean RoR2.EquipmentSlot::PerformEquipmentAction(RoR2.EquipmentIndex)' called on client"); return(false); } switch (equipmentIndex) { case EquipmentIndex.CommandMissile: this.remainingMissiles += 12; return(true); case EquipmentIndex.Saw: { Vector3 position = base.transform.position; Ray aimRay = this.GetAimRay(); bool crit = Util.CheckRoll(this.characterBody.crit, this.characterBody.master); ProjectileManager.instance.FireProjectile(Resources.Load <GameObject>("Prefabs/Projectiles/Sawmerang"), aimRay.origin, Util.QuaternionSafeLookRotation(aimRay.direction), base.gameObject, this.characterBody.damage, 0f, crit, DamageColorIndex.Default, null, -1f); return(true); } case EquipmentIndex.Fruit: if (this.healthComponent) { Util.PlaySound("Play_item_use_fruit", base.gameObject); EffectData effectData = new EffectData(); effectData.origin = base.transform.position; effectData.SetNetworkedObjectReference(base.gameObject); EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/FruitHealEffect"), effectData, true); this.healthComponent.HealFraction(0.5f, default(ProcChainMask)); return(true); } return(true); case EquipmentIndex.Meteor: { MeteorStormController component = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/MeteorStorm"), this.characterBody.corePosition, Quaternion.identity).GetComponent <MeteorStormController>(); component.owner = base.gameObject; component.ownerDamage = this.characterBody.damage; component.isCrit = Util.CheckRoll(this.characterBody.crit, this.characterBody.master); NetworkServer.Spawn(component.gameObject); return(true); } case EquipmentIndex.SoulJar: return(true); case EquipmentIndex.Blackhole: { Vector3 position2 = base.transform.position; Ray aimRay2 = this.GetAimRay(); ProjectileManager.instance.FireProjectile(Resources.Load <GameObject>("Prefabs/Projectiles/GravSphere"), position2, Util.QuaternionSafeLookRotation(aimRay2.direction), base.gameObject, 0f, 0f, false, DamageColorIndex.Default, null, -1f); return(true); } case EquipmentIndex.GhostGun: { GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/GhostGun"), base.transform.position, Quaternion.identity); gameObject.GetComponent <GhostGunController>().owner = base.gameObject; NetworkServer.Spawn(gameObject); return(true); } case EquipmentIndex.CritOnUse: this.characterBody.AddTimedBuff(BuffIndex.FullCrit, 8f); return(true); case EquipmentIndex.DroneBackup: { Util.PlaySound("Play_item_use_radio", base.gameObject); int sliceCount = 4; float num = 25f; if (NetworkServer.active) { float y = Quaternion.LookRotation(this.GetAimRay().direction).eulerAngles.y; float d = 3f; foreach (float num2 in new DegreeSlices(sliceCount, 0.5f)) { Quaternion rotation = Quaternion.Euler(0f, y + num2, 0f); Quaternion rotation2 = Quaternion.Euler(0f, y + num2 + 180f, 0f); Vector3 position3 = base.transform.position + rotation * (Vector3.forward * d); CharacterMaster characterMaster = this.SummonMaster(Resources.Load <GameObject>("Prefabs/CharacterMasters/DroneBackupMaster"), position3, rotation2); if (characterMaster) { characterMaster.gameObject.AddComponent <MasterSuicideOnTimer>().lifeTimer = num + UnityEngine.Random.Range(0f, 3f); } } } this.subcooldownTimer = 0.5f; return(true); } case EquipmentIndex.OrbitalLaser: { Vector3 position4 = base.transform.position; RaycastHit raycastHit; if (Physics.Raycast(this.GetAimRay(), out raycastHit, 900f, LayerIndex.world.mask | LayerIndex.defaultLayer.mask)) { position4 = raycastHit.point; } GameObject gameObject2 = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("Prefabs/NetworkedObjects/OrbitalLaser"), position4, Quaternion.identity); gameObject2.GetComponent <OrbitalLaserController>().ownerBody = this.characterBody; NetworkServer.Spawn(gameObject2); return(true); } case EquipmentIndex.BFG: this.bfgChargeTimer = 2f; this.subcooldownTimer = 2.2f; return(true); case EquipmentIndex.Enigma: { EquipmentIndex equipmentIndex2 = EquipmentCatalog.enigmaEquipmentList[UnityEngine.Random.Range(0, EquipmentCatalog.enigmaEquipmentList.Count - 1)]; this.PerformEquipmentAction(equipmentIndex2); return(true); } case EquipmentIndex.Jetpack: { JetpackController jetpackController = JetpackController.FindJetpackController(base.gameObject); if (!jetpackController) { GameObject gameObject3 = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/JetpackController")); jetpackController = gameObject3.GetComponent <JetpackController>(); jetpackController.NetworktargetObject = base.gameObject; NetworkServer.Spawn(gameObject3); return(true); } jetpackController.ResetTimer(); return(true); } case EquipmentIndex.Lightning: { this.UpdateTargets(); HurtBox hurtBox = this.currentTargetHurtBox; if (hurtBox) { this.subcooldownTimer = 0.2f; OrbManager.instance.AddOrb(new LightningStrikeOrb { attacker = base.gameObject, damageColorIndex = DamageColorIndex.Item, damageValue = this.characterBody.damage * 30f, isCrit = Util.CheckRoll(this.characterBody.crit, this.characterBody.master), procChainMask = default(ProcChainMask), procCoefficient = 1f, target = hurtBox }); this.InvalidateCurrentTarget(); return(true); } return(false); } case EquipmentIndex.PassiveHealing: if (this.passiveHealingFollower) { this.UpdateTargets(); this.passiveHealingFollower.AssignNewTarget(this.currentTargetBodyObject); this.InvalidateCurrentTarget(); return(true); } return(true); case EquipmentIndex.BurnNearby: if (this.characterBody) { this.characterBody.AddHelfireDuration(8f); return(true); } return(true); case EquipmentIndex.SoulCorruptor: { this.UpdateTargets(); HurtBox hurtBox2 = this.currentTargetHurtBox; if (!hurtBox2) { return(false); } if (!hurtBox2.healthComponent || hurtBox2.healthComponent.combinedHealthFraction > 0.25f) { return(false); } Util.TryToCreateGhost(hurtBox2.healthComponent.body, this.characterBody, 30); hurtBox2.healthComponent.Suicide(base.gameObject, null, DamageType.Generic); this.InvalidateCurrentTarget(); return(true); } case EquipmentIndex.Scanner: NetworkServer.Spawn(UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/ChestScanner"), this.characterBody.corePosition, Quaternion.identity)); return(true); case EquipmentIndex.CrippleWard: NetworkServer.Spawn(UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/CrippleWard"), this.characterBody.corePosition, Quaternion.identity)); this.inventory.SetEquipmentIndex(EquipmentIndex.None); return(true); case EquipmentIndex.Gateway: return(this.FireGateway()); case EquipmentIndex.Tonic: this.characterBody.AddTimedBuff(BuffIndex.TonicBuff, EquipmentSlot.tonicBuffDuration); if (!Util.CheckRoll(80f, this.characterBody.master)) { this.characterBody.pendingTonicAfflictionCount++; return(true); } return(true); case EquipmentIndex.QuestVolatileBattery: return(false); case EquipmentIndex.Cleanse: { Vector3 corePosition = this.characterBody.corePosition; EffectData effectData2 = new EffectData { origin = corePosition }; effectData2.SetHurtBoxReference(this.characterBody.mainHurtBox); EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/CleanseEffect"), effectData2, true); BuffIndex buffIndex = BuffIndex.Slow50; BuffIndex buffCount = (BuffIndex)BuffCatalog.buffCount; while (buffIndex < buffCount) { if (BuffCatalog.GetBuffDef(buffIndex).isDebuff) { this.characterBody.ClearTimedBuffs(buffIndex); } buffIndex++; } DotController.RemoveAllDots(base.gameObject); SetStateOnHurt component2 = base.GetComponent <SetStateOnHurt>(); if (component2) { component2.Cleanse(); } float num3 = 6f; float num4 = num3 * num3; TeamIndex teamIndex = this.teamComponent.teamIndex; List <ProjectileController> instancesList = InstanceTracker.GetInstancesList <ProjectileController>(); List <ProjectileController> list = new List <ProjectileController>(); int i = 0; int count = instancesList.Count; while (i < count) { ProjectileController projectileController = instancesList[i]; if (projectileController.teamFilter.teamIndex != teamIndex && (projectileController.transform.position - corePosition).sqrMagnitude < num4) { list.Add(projectileController); } i++; } int j = 0; int count2 = list.Count; while (j < count2) { ProjectileController projectileController2 = list[j]; if (projectileController2) { UnityEngine.Object.Destroy(projectileController2.gameObject); } j++; } return(true); } case EquipmentIndex.FireBallDash: { Ray aimRay3 = this.GetAimRay(); GameObject gameObject4 = UnityEngine.Object.Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/NetworkedObjects/FireballVehicle"), aimRay3.origin, Quaternion.LookRotation(aimRay3.direction)); gameObject4.GetComponent <VehicleSeat>().AssignPassenger(base.gameObject); CharacterBody characterBody = this.characterBody; NetworkUser networkUser; if (characterBody == null) { networkUser = null; } else { CharacterMaster master = characterBody.master; if (master == null) { networkUser = null; } else { PlayerCharacterMasterController playerCharacterMasterController = master.playerCharacterMasterController; networkUser = ((playerCharacterMasterController != null) ? playerCharacterMasterController.networkUser : null); } } NetworkUser networkUser2 = networkUser; if (networkUser2) { NetworkServer.SpawnWithClientAuthority(gameObject4, networkUser2.gameObject); } else { NetworkServer.Spawn(gameObject4); } this.subcooldownTimer = 2f; return(true); } case EquipmentIndex.GainArmor: this.characterBody.AddTimedBuff(BuffIndex.ElephantArmorBoost, 5f); return(true); } return(false); }